Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在另一个函数中使用异步函数?_Javascript_Async Await - Fatal编程技术网

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

Javascript 如何在另一个函数中使用异步函数?,javascript,async-await,Javascript,Async Await,我想调用一个异步函数,在另一个函数中进行API调用 特别是在下面的代码中,我定义了一个异步函数verifyEmail对邮件地址的验证服务进行API调用。当我用一封随机电子邮件测试它时,该功能正在工作 我希望能够在解析json文件并返回对象数组的getProfileInfos函数中调用此函数。verifyEmail(result.dropcontact.email)是错误的,因为它总是返回未解析的Promise。我做了一些研究,但没有找到正确的语法来调用异步函数并等待结果在我的对象中设置电子邮件

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

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

我希望能够在解析json文件并返回对象数组的
getProfileInfos
函数中调用此函数。
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;
}

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

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

尝试在
getProfileInfos
props中定义异步,并在验证电子邮件之前调用wait

e、 g


您还必须等待verifyEmail函数,这也使您的getProfileInfos函数成为一个异步函数,等待使用
wait
关键字或
.then()
方法完成承诺的结果。无需等待同步等待(阻塞)。感谢您的回答,我已尝试编写不同的答案(对下一个答案的评论),但仍然无法在函数中获得承诺的结果。感谢您的快速回答。我得到一个语法错误,我想这是因为在本例中,
constresults=jsonData.map((result).
应该是异步函数。但是当我尝试
jsonData.map(async(result).
时,我只得到一个
Promise{}数组
尝试console.log jsonData并检查数组是否正在提取。如果承诺正在等待javascript等待的内容,则可能需要使用.then()来获取这些数据。是的,当我不使用
verifyEmail
功能时,代码按预期工作。
const email=result.dropcontact?result.dropcontact.email:未定义;
允许我获取所需对象。
const email=result.dropcontact?等待verifyEmail(result.dropcontact.email)。然后(email=>email):未定义;
我也尝试过,但仍然没有返回验证过的电子邮件
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;
}