This question already has an answer here:
avoiding nested callbacks with promises
(1个答案)
去年关闭。
[未复制]
问题不同,但是我的问题在下面得到了回答
我正在创建一个离子项目,在该项目中我必须做很多承诺,然后可能会有一些这样的承诺
我看到了一个例子,它把一个然后放在另一个
但是在我的示例中,有时它没有返回承诺,而我又需要抓住不同的错误,那又怎么样呢?
我什么时候做出这些嵌套的承诺?
从存储中获取用户以获取API_TOKEN来创建请求
然后,我请求更新销售清单中的商品
然后,如果该项目的两列具有特定值,我会再次请求更新销售
根据您的用例,您甚至可以使用
如果您决定使用
(1个答案)
去年关闭。
[未复制]
问题不同,但是我的问题在下面得到了回答
我正在创建一个离子项目,在该项目中我必须做很多承诺,然后可能会有一些这样的承诺
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(() => { ... })
但是在我的示例中,有时它没有返回承诺,而我又需要抓住不同的错误,那又怎么样呢?
我什么时候做出这些嵌套的承诺?
从存储中获取用户以获取API_TOKEN来创建请求
然后,我请求更新销售清单中的商品
然后,如果该项目的两列具有特定值,我会再次请求更新销售
最佳答案
正如您在编辑中提到的那样,链接您的诺言是解决嵌套诺言的经典方法。实际上,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。关于javascript - 如何防止可能的嵌套 promise ? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54833830/
10-16 21:55