我希望在完成异步函数的所有回调时关闭一些页面,但并非所有 (let [args (mapv #(list 'func (:service 'event) %) service-list)
form (list 'project args (...))]
(eval form))
语句都可能为真。现在它看起来像这样:
if()
答案 0 :(得分:2)
您可以使用Promise.all
:
var promises = [];
if (this.originalFrom > addFrom) {
promises.push(this.dataService.addTimeSlots(details));
}
if (this.originalTo < addTo) {
promises.push(this.dataService.addTimeSlots(details2));
} else if (this.originalTo > addTo) {
promises.push(this.dataService.addTimeSlots(details3));
}
Promise.all(promises).then((result) => {
console.log(result);
}, (err) => {
console.log(err);
});
答案 1 :(得分:1)
您要做的是在完成所有回调后调用该函数。如果一个if语句返回false,那么你想抓住整个过程。
执行此操作的一种较差方法是将回调嵌套为以下格式:
1 if (this.originalFrom > addFrom) {
2 this.dataService.addTimeSlots(details).then((result) => {
3 console.log(result);
4 if (this.originalTo < addTo) {
5 this.dataService.addTimeSlots(details2).then((result) => {
6 console.log(result);
7 if (this.originalTo > addTo) {
8 this.dataService.addTimeSlots(details3).then((result) => {
9 console.log(result);
10 some_Page_Closing_Function_When_All_Callbacks_Are_Done();
11 }, (err) => {
12 console.log(err);
13 });
14 }
15 }, (err) => {
16 console.log(err);
17 });
18 }
19
20 }, (err) => {
21 console.log(err);
22 });
23 }
然而,这被称为回调地狱。详细,不可读,不可维护的spagetti代码。
您可以尝试将anonymouse函数转换为命名函数,以获得更易读的解决方案。这仍然是一种hacky。
https://github.com/caolan/async
https://caolan.github.io/async/
您可以使用此库来避免上述回调地狱。