如何解决javascript中的异步等待问题?

如何解决javascript中的异步等待问题?,javascript,node.js,async-await,es6-promise,Javascript,Node.js,Async Await,Es6 Promise,下面是我的代码 让icsFileData=[]; icsFileData=filteratachmentarray.map(异步(文件)=>{ 让buff=newbuffer(file.data,'base64'); 让text=buff.toString('ascii'); const data=wait icial.async.parseICS(文本); const objectKeys=Object.values(数据); 常数过滤器= objectKeys.length==1 | | o

下面是我的代码
让icsFileData=[];
icsFileData=filteratachmentarray.map(异步(文件)=>{
让buff=newbuffer(file.data,'base64');
让text=buff.toString('ascii');
const data=wait icial.async.parseICS(文本);
const objectKeys=Object.values(数据);
常数过滤器=
objectKeys.length==1 | | objectKeys[0]。类型===“VEVENT”?objectKeys[0]:objectKeys[1];
常数desiredObj={
主题:filterbj.summary.val?filterbj.summary.val:filterbj.summary,
description:filterObj.description.val?filterObj.description.val:filterObj.description,
dateStart:moment(filterObj.start).format('YYYY-MM-DDTHH:MM:ss\\Z'),
dateEnd:moment(filterObj.end).format('yyyyy-MM-DDTHH:MM:ss\\Z'),
组织者:filterObj.organizer.params.EMAIL?
filterObj.organizer.params.EMAIL:
filterObj.organizer.val.split('mailto:').join(''),
邀请:filterObj.attendee.length==未定义?
filterObj.attendee.params.EMAIL?
filterObj.attendee.params.EMAIL:
filterObj.attendee.val.split('mailto:').join(''):
filterObj.attendee.map(
(邀请)=>
invite.params.EMAIL?invite.params.EMAIL:invite.val.split('mailto:').join('')
),
位置:filterbj.location.val?filterbj.location.val:filterbj.location
};
icsFileData.push(desiredObj);
});
//const icsFileDataArray=wait Promise.all(icsFileData);
log('jhgjhgj:',等待icsFileData)需要理解的东西

  • async/await
    只是编写异步代码的一种语法糖 同步方式
  • .map(async()=>{…})中的回调将返回一个
    承诺
  • 因此,在您的代码中,
    icsFileData
    Promise
    ,因此您必须使用
    Promise.all
    来解决所有问题 保证得到预期的结果
  • 需要了解的事情

  • async/await
    只是编写异步代码的一种语法糖 同步方式
  • .map(async()=>{…})中的回调将返回一个
    承诺
  • 因此,在您的代码中,
    icsFileData
    Promise
    ,因此您必须使用
    Promise.all
    来解决所有问题 保证得到预期的结果

  • 你能添加一段代码吗?这比图片更好,也有助于解决你的问题。我添加了请检查
    Promise{}
    的意思是你必须使用.then()来检查值。使用如下内容
    const returnFromAwait=wait icsFileData()returnfromwait.then(res=>console.log(res))不工作我尝试了这个onePromise{:undefined}proto:PromiseStatus[[PromiseStatus]]:“已解决”得到这样的东西?[[PromiseValue]]:取消定义您可以添加代码片段,这比图片更好,也有助于解决您的问题。我添加了请检查
    Promise{}
    意味着您必须使用.then()检查值。使用如下内容
    const returnFromAwait=wait icsFileData()returnfromwait.then(res=>console.log(res))不工作我尝试了这个onePromise{:undefined}proto:PromiseStatus[[PromiseStatus]]:“已解决”得到这样的东西?[[PromiseValue]]:未定义
    
    let icsFileData = [];
    icsFileData = filterAttachmentArray.map(async(file) => {
      ....
      // you dont need this line, you can simply return the desiredObj
      // icsFileData.push(desiredObj);
      return desiredObj;
    });
    // this does the magic, since, icsFileData is a array of Promise
    const icsFileDataArray = await Promise.all(icsFileData);
    console.log('result: ', icsFileDataArray);