为什么这两个代码段的输出方式不同?在第一个,当我控制台时,我得到待处理的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);
})();
答案 0 :(得分:1)
如果该过程是异步的,您可以使用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);
})();
答案 1 :(得分:1)
第一种情况:
您启动了异步任务,无需等待任务完成请求任务的值(不确定原因)。
第二种情况:
您填写结构并立即打印,以便它可以正常工作。
但await "whatever";
只是"whatever"