异步/等待与使用.then
,.finally
和.catch
的更多标准承诺表示法之间是否存在差异
例如
functionThatReturnsPromise(someVar).then((returnedValueFromPromise) => {
console.log(returnedValueFromPromise)
})
vs
async functionThatReturnsPromise(someVar) {
await returnedValueFromPromise
}
我不确定Promise链接是否只是旧的表示法,是否已被更新的async / await代替。两者仍然有用例吗?什么是更好的做法?
答案 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
作用域函数内async
包含的函数返回的所有值都是promises 答案 2 :(得分:1)
在使用await
时要小心一点,就是您需要将await
的语句包装在try catch block
中,以防请求失败,我个人认为这比常规的诺言链更糟糕