如何解决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);