繁体   English   中英

如何正确等待ES6 Javascript异步函数的解析值?

[英]How to properly await for the resolved value of an ES6 Javascript async function?

为什么这两个代码段输出不同? 在第一个中,当我退出控制台时,我将获得待处理的Promises(当我需要实际值时)。

(() => {
  let message = {
    actions: [{}]
  };
  message.actions = message.actions.map(async action => {
    action.result = {};
    action.result.startAt = await "whatever";
    return action;
  });

  console.log(message);
})();

在第二个代码段中,我得到了实际的解析值...

( async () => {
  let message = {
   actions: [{}]
  };                                                                                                
  message.actions[0].result = {};
  message.actions[0].result.startAt = await "whatever";

  console.log(message);
})(); 

如果该过程是异步的,则可以使用Promise.all()for循环来等待message.actions每个元素以返回Promise

 (async () => { let message = { actions: [{}] }; message.actions = await Promise.all(message.actions.map(async(action) => { action.result = {}; action.result.startAt = await new Promise(resolve => setTimeout(resolve, Math.floor(Math.random() * 1000), "whatever")); return action; })); console.log(message); })(); 

第一种情况:

您启动了异步任务,而没有等待它完成以请求任务值(不确定原因)。

第二种情况:

您填充结构并立即将其打印出来即可正常工作。

然而await "whatever"; 只是"whatever"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM