【问题标题】:Await function not waiting and passing to next line等待函数不等待并传递到下一行
【发布时间】:2021-02-09 02:45:07
【问题描述】:

我创建了一个基本函数,它调用另一个应该返回结果的函数,然后我想从主函数记录它,但是当我这样做时,它只是不等待和记录(未定义)而不是等待结果到达.

const returnBool = async () => {
  const googleData = await getData();
  console.log(googleData);
};


const getData = () => {
  googleTrends
    .interestOverTime({ keyword: `Test` })
    .then(function (results) {
      console.log(results);
      return results;
    })
    .catch(function (err) {
      console.error('Oh no there was an error', err);
    });
};

【问题讨论】:

标签: javascript node.js async-await


【解决方案1】:

您的 getData 函数不会返回 Promise,因此 (a)waiting 因为它没有多大作用。因此,googleData 在您尝试将其记录到控制台时仍未定义。

例如,尝试将 getData 代码包装在 Promise 中,如下所示:

const getData = () => {
  return new Promise((resolve, reject) => {
  
    googleTrends
    .interestOverTime({ keyword: `Test` })
    .then(function (results) {
      return resolve(results);
    })
    .catch(function (err) {
      return reject(err);
    });

  });
}

另外我建议在第一个异步函数中添加一个try ... catch 块,像这样

const returnBool = async () => {
  try {
  
    const googleData = await getData();
    console.log(googleData);

  } catch (ex) {
  
  }
};

实际上,根据您实际尝试执行的操作,您可以在此处保存一些行并去掉这样的附加功能:

const returnBool = async () => {
  try {
  
    const googleData = await googleTrends.interestOverTime({ keyword: 'Test' });
    return googleData ? true : false;

  } catch (ex) {
    /* error handling */
    return false
  }
}

如果可以的话,让我再提一件事。 returnBool 并不是一个函数的好名字。尝试更具描述性的内容,例如

const keywordHasData = async (keyword) => {
   // ... await googleTrends.interestOverTime({ keyword });
}

【讨论】:

    猜你喜欢
    • 2019-12-12
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2018-02-03
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多