node.js - 异步/等待不返回已解决的承诺
问题描述
据我了解async/await
,await
会导致 JavaScript 暂停,直到Promise
解决或拒绝,然后再继续前进。给定以下代码
function foo(uri) {
… do a bunch of other stuff …
const result = bar(uri);
console.log('step 2 done');
return {"uri": uri, "result": result};
}
function async bar(uri) {
const response = await fetch(uri);
const result = await JSON.parse(response);
console.log('step 1 done');
return result;
}
const result = foo('my/server/resource');
console.log(result);
我预计
step 1 done
step 2 done
{"uri": 'my/server/resource', "result": { … bunch of data … }}
但我明白了
step 2 done
{"uri": 'my/server/resource', "result": {}}
step 1 done
我究竟做错了什么?
解决方案
为了让 JavaScript知道返回的是分辨率而不是 Promise 对象(以后可能会使用),您需要在您的方法bar()
中让它知道这一点:await
foo()
const result = await bar(uri);
console.log('step 2 done');
return {"uri": uri, "result": result};
另请注意,由于我们现在使用preservedawait
关键字,您的foo()
方法还必须async
在方法名称之前有前缀
async function foo(uri) {