これら2つのコードスニペットの出力が異なるのはなぜですか?最初のものでは、私がコンソールアウトするとき、私は約束を待っている(私は実際の値をしたいとき)。ES6 Javascript非同期関数の解決された値を正しく待つ方法はありますか?
(() => {
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);
})();
非同期関数は約束を返すされ、その解決の値が 'それから()'コールバックでご利用いただけます。だから、あなたの最初のスニペットはただの約束をしているだけです。 2番目のスニペットは、非同期関数の結果を記録するのではなく、単に非同期関数内にオブジェクトを記録することです。 –
'async'は最初の例では使用されていません – guest271314
そうですが、解決された値を完全に待つためにconsole.logを取得するにはどうすればよいですか?私の実際のコードでは、console.logはSNSキューへのプッシュであり、値として "Pending Promise"を取得します。 – pjb