使用异步等待 es6 函数在变量上未定义

undefined on variable with async await es6 function

不确定为什么我总是在 possibleAnagrams 变量上得到 undefined,非常感谢任何帮助!

const anagramica = require('anagramica');

const processBody = async (generatedString, arrayOfWords) => {
  const possibleAnagrams = await anagramica.all(generatedString, (err, response) => {
    if (err) {
      console.log(`Could not find possible anagrams : ${err}`);
    }
    else {
      console.log("1", response.all);
      /// [ Array ] ///
      const array = response.all;
      console.log("2", array);
      /// [ Array ] ///
      return array;
    }
  })
  console.log("3", possibleAnagrams)
  /// undefined ///

  return { possibleAnagrams, arrayOfWords }
}

看起来 anagramica 不是 return Promise。如果您想使用 async/await,请考虑将其变成 Promise。

const anagramica = require('anagramica');

const anagramicaPromise = generatedString => new Promise((res, rej) => {
  anagramica.all(generatedString, (err, response) => {
    if (err) {
      return rej(err);
    }
    res(response);
  }
});

const processBody = async (generatedString, arrayOfWords) => {
  try {
    const possibleAnagrams = await anagramicaPromise(generatedString);
    console.log("3", possibleAnagrams);
    return { possibleAnagrams, arrayOfWords }
  } catch(err) {
    console.log(`Could not find possible anagrams : ${err}`);
  }
}

与@Nick 相同,但使用 es6-promisify 模块:

const { promisify } = require('es6-promisify');
const anagramica = require('anagramica');

const processBody = async (generatedString, arrayOfWords) => {
  try {
    const { all: possibleAnagrams } = await promisify(anagramica.all)(generatedString);
    return { possibleAnagrams, arrayOfWords };
  } catch (err) {
    console.log(`Could not find possible anagrams : ${err}`);
  }
};