异步/等待与新的承诺(解决,拒绝)

时间:2018-11-04 11:46:32

标签: javascript promise

异步/等待与使用.then.finally.catch的更多标准承诺表示法之间是否存在差异

例如

functionThatReturnsPromise(someVar).then((returnedValueFromPromise) => {
    console.log(returnedValueFromPromise)
})

vs

async functionThatReturnsPromise(someVar)  {
    await returnedValueFromPromise
}

我不确定Promise链接是否只是旧的表示法,是否已被更新的async / await代替。两者仍然有用例吗?什么是更好的做法?

3 个答案:

答案 0 :(得分:1)

这一切都取决于您想要什么。 turnover | Spending | sales | DirecTv | month | year 5500 | 3000 | 2000 | 50 | 10 |2018 1000 | 2000 | 500 | 0 | 11 |2018 / --to get total amount of sales select sum(sl.price) , month(sl.date) , year(sl.date) from sales sl GROUP by year(sl.date) , month(sl.date) --for directtv select sum(dv.amount) , month(dv.date) , year(dv.date) from directtv dv GROUP by year(dv.date) , month(dv.date) --for turnover SELECT sum(sl.quantity*sl.price) , month(sl.date) FROM sales sl GROUP by year(sl.date), month(sl.date) 是新的。以这种方式思考,它们允许一个诺言像不同步时一样运行。

此外,使用async / await可以使您的代码更简洁,更易读。 为了回答您的问题,它们之间在功能上没有太大差异。语法完全不同。

Promise链接不是旧的方式,它们是相当新的东西,只是async / await出现得更晚了-为您提供了一种更好的处理Promises的方式。

最后,您可以在代码中互换使用它们。

答案 1 :(得分:1)

您误会了它的工作原理。使用async/await,您将获得同步的代码执行语法流:

try {
  const returnedValueFromPromise = await functionThatReturnsPromise(someVar);
} catch (err) {
  console.error(err);
  throw err
}

注意

  • 代码块必须位于async作用域函数内
  • 您仍然需要进行错误处理,不能假设promise总是可以正常工作
  • 默认情况下,async包含的函数返回的所有值都是promises

答案 2 :(得分:1)

在使用await时要小心一点,就是您需要将await的语句包装在try catch block中,以防请求失败,我个人认为这比常规的诺言链更糟糕