据我对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
我在做什么错了?
答案 0 :(得分:1)
为了让JavaScript 知道 bar()
返回一个分辨率而不是Promise对象(稍后会使用),您需要通过以下方式使其知道await
中的foo()
:
const result = await bar(uri);
console.log('step 2 done');
return {"uri": uri, "result": result};
还请注意,由于我们现在使用的是保留的await
关键字,因此您的foo()
方法还必须在方法名称前加上async
前缀
async function foo(uri) {