我有一个调用三个异步函数的函数。 我想在每次完成其中一个功能时通知被叫方,以向用户显示操作的进度。
有没有办法在没有从fn返回的情况下“通知”被叫方?
function updateDataset(...) {
return a().then(function () {
console.log("[someService] Task 1 done...");
return b(...).then(function (entries) {
console.log("[someService] Task 2 done...");
var requests = c(entries);
return Promise.all(requests).then(function () {
console.log("[someService] Task 3 done...");
return true;
});
});
});
}
被叫方看起来像这样:
someService.updateDataset(...).then(function (isSucc) {
//Do stuff
});
如果我可以将.notified()
链接到承诺链......
答案 0 :(得分:2)
你可以传递一个回调并在那里处理通知,另外你可以“扁平化”链,这样每个承诺都会返回,而你在另一个.then
内没有.then
我重构了一些你的代码只是为了向你展示一种可行的方法。
function updateDataset(notificationCb) {
return a()
.then(function () {
console.log("[someService] Task 1 done...");
notificationCb(1); //first ended
return b(...);
})
.then(function (entries) {
console.log("[someService] Task 2 done...");
var requests = c(entries) ;
notificationCb(2); //second ended
return Promise.all(requests);
})
.then(function () {
console.log("[someService] Task 3 done...");
//here there's no need to call the callback because the fn returns to the caller
return true;
});
}
和来电者:
someService.updateDataset(function(notification){
//here you choose the strategy to handle the notification
if(notification === 1){
//first has ended.. etc.
} else{
}
})
.then(function (isSucc) {
//Do stuff
});