异步/等待不返回已解决的承诺

时间:2018-12-17 06:08:58

标签: node.js async-await

据我对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

我在做什么错了?

1 个答案:

答案 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) {