代码之家  ›  专栏  ›  技术社区  ›  punkish

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

  •  0
  • punkish  · 技术社区  · 6 年前

    据我所知 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 回复  |  直到 6 年前
        1
  •  1
  •   kano    6 年前

    为了让javascript 知道 那个 bar() 返回一个解决方案而不是承诺对象(稍后可能会使用),您需要让它通过 await 在你的 foo() 方法:

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

    还要注意,由于我们现在使用的是 等待 关键字,您 英尺() 方法还必须具有 async 方法名称前的前缀

    async function foo(uri) {