此时,使用Proscriptes上的Typescript异步/等待是否有好处?
我有一个用打字稿写的单页应用程序,还没有使用过async / await。
现在是时候转换为使用异步/等待而不是承诺了吗?
我的担忧:
有速度差吗? TS目前是我的项目中的ES5,与承诺相比,生成的代码显得有些冗长。
Promise.all()呢?有没有办法用打字稿async / await
答案 0 :(得分:4)
我要说一下async / await的好处(顺便说一句,它不仅具有Typescript还具有javascript功能)是,如果您具有多个承诺的代码段,它可以使代码更清晰。异常处理也将更加无缝。
但是,这并不意味着您必须转换为异步/等待状态。承诺仍将是async / await使用的基础元素,它们不会随处可见。
更好的了解方法是自己对它进行基准测试,但我认为不会有很大的不同。
异步/等待几乎只是包装其他承诺,因此任何会返回Promise的东西都可以使用。这意味着
Promise.all(promises).then(data => console.log(data));
可以转换为
const data = await Promise.all(promises);
console.log(data),
答案 1 :(得分:2)
与承诺相比,生成的代码显得有些罗word。
“罗word”的结果不应该引起您的关注,并且对表现不佳也没有因果关系。
如果要检查性能问题,请在类似生产的条件下对其进行基准测试。
但是,您应该注意不要让您的源代码过于冗长,请为自己和您的同事清除。
考虑一下:
async function startGame() {
var currentScore = 5;
console.log('Game Started! Current score is ' + currentScore);
currentScore = await levelOne(currentScore);
console.log('You have reached Level One! New score is ' + currentScore);
currentScore = await levelTwo(currentScore);
console.log('You have reached Level Two! New score is ' + currentScore);
currentScore = await levelThree(currentScore);
console.log('You have reached Level Three! New score is ' + currentScore);
}
对此:
var startGame = new Promise(function (resolve, reject) {
var currentScore = 5;
console.log('Game Started! Current score is ' + currentScore);
resolve(currentScore);
});
startGame.then(levelOne)
.then(function (result) {
console.log('You have reached Level One! New score is ' + result);
return result;
})
.then(levelTwo).then(function (result) {
console.log('You have reached Level Two! New score is ' + result);
return result;
})
.then(levelThree).then(function (result) {
console.log('You have reached Level Three! New score is ' + result);
});
(来自https://dev.to/siwalik/async-programming-basics-every-js-developer-should-know-in-2018-a9c的示例)
如前所述,异步/等待只是Promises的包装。
支持使用async/await
的另一个有趣之处是,使用async / await的“同步外观代码”比使用Promises更自然地进行错误处理!
Axnyff的答案已经涵盖了Promise.all的所有要点。