将经典承诺与异步相结合

时间:2018-02-13 13:24:48

标签: javascript es6-promise

这段代码是否正确?我可以结合这样的承诺吗?

var data = {}
await getInfo(data.com)
 .then(result => {data = result})
 .catch(error => {})
doStuffOnlyAfterGetInfo(data)

2 个答案:

答案 0 :(得分:1)

是的,你可以这样做,你可以这样想await

await x其中x是承诺或任何值。在您的情况下,链调用返回一个承诺。

所有这些都有效:

async function fn() {
  try {
    var a = await 20; // a = 20
    var b = Promise.resolve(20); // b = 20
    var c = Promise.reject(20); // This throws exception
    var d = Promise.reject(20).catch(() => 30) // d = 30
    var e = fetch(url) // same as fetch(url).then(e => /*...*/)
    var f = fetch(url).then(res => res.json())
  catch (e) {
    console.log(e) // 20
  }
}

另外请注意,您只能在await个功能中使用async

Seed the Docs

答案 1 :(得分:0)

您可以,因为promise.then()promise.catch()也会返回承诺。

您可以在then\catch使用try\catch

的情况下执行相同操作
async function getInfo(url)
{
   try{
     const result = await fetch(url);
     return {data: result};
   }
   catch(e){

   }
}