我希望在承諾成功或失敗後執行相同的操作,即我想爲成功和錯誤處理程序執行相同的操作,然後繼續將承諾的結果發送給合適的erroe /成功處理程序。無論承諾履行如何執行相同的操作?
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
,這也可能是一個函數調用,而不是一個承諾(如clearInterval
)
你不會說你正在使用的是什麼Promise庫,但是對於藍鳥承諾庫,無論承諾如何實現,你都可以使用'.finally()'來執行你想運行的動作。有關詳細信息,請參見[https://github.com/petkaantonov/bluebird/blob/master/API.md#finallyfunction-handler---promise]。如我認爲很明顯的標籤所描述的那樣,WinJS是 – jfriend00 2014-12-05 18:47:33
。 「最後」看起來只能在承諾鏈的最後。我希望它在鏈條的中間。 – philk 2014-12-05 23:11:11
對於我們這些不認識winJS的人來說,我不清楚它是否有自己的諾言庫(即使我在網上查到它)。如果你想從更大的社區獲得幫助,最好在你的問題上更具體。像.finally()這樣的所有非標準方法都是特定於庫的,所以你必須看看winJS在這方面的作用。 – jfriend00 2014-12-05 23:12:36