[未复制] 问题不同,但是我的问题在下面得到了解答
我正在创建一个离子项目,在该项目中我必须做很多承诺,然后可能有一些这样的承诺
this.Promise1()
.then((data) => {
if(logicTest){
return this.Promise2()
.then((data) => {
// ...
})
.catch(error => {
// Present error message to the user
});
}
// ...
})
.catch(error => {
// Present error message to the user
})
我看到了一个示例,它像下面这样
this.Promise1()
.then(() => { ... })
.then(() => { ... })
但是在我的示例中,有时它没有返回承诺并且我需要抓住不同的错误呢?
答案 0 :(得分:2)
正如您在编辑中提到的那样,链接诺言是解决嵌套诺言的经典方法。实际上,Promise API的主要目的之一就是为"callback hell"提供解决方案。
如果您想更进一步,也可以使用async
/ await
。关于先前删除的async
/ await
兼容性问题,Ionic基于配置的兼容性目标使用TypeScript和TypeScript转码代码。这意味着您应该能够使用async
/ await
来简化嵌套或链接的承诺,而不会出现问题。
例如:
async myFunction() {
try {
const data = await this.Promise1();
if (logicTest) {
try {
return await this.Promise2();
}
catch (error) {
// Present error message to the user
}
}
// ...
}
catch (error) {
// Present error message to the user
}
}
根据您的用例,您甚至可以使用async
/ await
简化代码,以进一步防止过多的嵌套。
如果您确实决定使用async
/ await
,则应确保阅读该功能的工作原理。滥用此功能可能导致比赛状况和其他难以诊断的意外行为。存在许多博客文章和教程,它们比我在这里可以更好地描述功能。快速的Google搜索弹出了该搜索,例如:https://javascript.info/async-await。