我想在 promise 完成并获得成功或失败后执行相同的操作,即我想对成功和错误处理程序执行相同的操作,然后继续发送 promise 的结果到适当的错误/成功处理程序。
var pleaseWaitPromise = playAudioAsync("please wait");
myLongRunningPromise().then(function tempSuccessHandler(result) {
pleaseWaitPromise.cancel();
return result;
}, function tempErrorHandler(error) {
pleaseWaitPromise.cancel();
return WinJS.Promise.wrapError(error);
}).done(function realSuccessHandler(result) {
console.info(result);
}, function realError(error) {
console.error(error);
});
是否有更优雅的方法来停止 pleaseWaitPromise
,这也可以是函数调用而不是 promise (如 clearInterval
)
最佳答案
jfriend 是对的,您通常希望在这里使用 finally
- 它的作用与上面的代码完全相同。遗憾的是,WinJS Promise 目前还没有 .finally
功能,因此除非您想对其进行填充(在 WinJS.promise 的原型(prototype)上进行修补),否则您将不得不使用它。
您也可以将其作为函数:
function always(prom, fn){
return prom.then(function(v){ fn(v); return v; },
function(e){ fn(e); return WinJS.Promise.wrapError(error); });
}
看起来像:
always(myLongRunningPromise(),
pleaseWaitPromise.cancel();
})).done(function realSuccessHandler(result) {
console.info(result);
}, function realError(error) {
console.error(error);
});
关于javascript - 无论 promise 是否兑现,如何执行相同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27320139/