首页 > 解决方案 > 异步/等待不返回已解决的承诺

问题描述

据我了解async/awaitawait会导致 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

我究竟做错了什么?

标签: node.jsasync-await

解决方案


为了让 JavaScript知道返回的是分辨率而不是 Promise 对象(以后可能会使用),您需要在您的方法bar()中让它知道这一点:awaitfoo()

const result = await bar(uri);
console.log('step 2 done');
return {"uri": uri, "result": result};

另请注意,由于我们现在使用preservedawait关键字,您的foo()方法还必须async在方法名称之前有前缀

async function foo(uri) {

推荐阅读