如何在另一个函数中使用异步函数?

时间:2019-07-24 21:02:13

标签: javascript async-await

我想调用一个异步函数,在另一个函数内部进行API调用。

特别是在下面的代码中,我定义了一个异步函数verifyEmail,该函数对邮件地址的验证服务进行API调用。当我用随机电子邮件对其进行测试时,该功能可以正常工作。

我希望能够在getProfileInfos函数内部调用此函数,该函数解析一个json文件并返回一个对象数组。 verifyEmail(result.dropcontact.email)是错误的,因为它将始终返回未解析的Promise。我做了一些研究,但是没有找到正确的语法来调用异步函数并等待结果将电子邮件设置到我的对象中。

感谢您的帮助!

const verifyEmail = async (email) => {
  const response = await fetch(`https://apilayer.net/api/check?access_key=******&email=${email}`);
  const data = await response.json();
  if (data.format_valid && data.score > 0.5) {
    return data.email;
  };
}

const getProfileInfos = (data) => {
  const jsonData = JSON.parse(data);
  const results = jsonData.map((result) => {
    if (result.general) {
      const firstName = result.general.firstName;
      const lastName = result.general.lastName;
      const company = result.jobs[0].companyName;
      const jobTitle = result.jobs[0].jobTitle;
      const email = result.dropcontact ? verifyEmail(result.dropcontact.email) : undefined;
      return {
        firstName,
        lastName,
        company,
        jobTitle,
        email
      }
    }
  });
  return results;
}

2 个答案:

答案 0 :(得分:1)

尝试在getProfileInfos道具中定义异步,并在verifyEmail之前调用await

例如

const getProfileInfos = async (data) => {
  const jsonData = JSON.parse(data);
  const results = jsonData.map((result) => {
    if (result.general) {
      const firstName = result.general.firstName;
      const lastName = result.general.lastName;
      const company = result.jobs[0].companyName;
      const jobTitle = result.jobs[0].jobTitle;
      const email = result.dropcontact ? await verifyEmail(result.dropcontact.email) : undefined;
      return {
        firstName,
        lastName,
        company,
        jobTitle,
        email
      }
    }
  });
  return results;
}

答案 1 :(得分:0)

async关键字添加到getProfileInfos并将行const email = ...更改为

const email = result.dropcontact ? (await verifyEmail(result.dropcontact.email)) : undefined;