javascript - 无论 promise 是否兑现,如何执行相同的操作?

标签 javascript promise winjs

我想在 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/

相关文章:

javascript - 如何根据 jQuery 中是否设置变量来创建数组

javascript - 为什么在 Cordova 中以 Windows 8 为目标时会自动包含 WInJS?

javascript - WinJS - 如何访问 LED 闪光灯(在 Windows Phone 上)?

windows-8 - 没有数据源时如何给出 "Empty ListView Message"

Javascript,创建和监听自定义事件

javascript - Node.js 中的 REPL 驱动开发

javascript - 使用 json 数组中的 javascript 在 html 中呈现动态选择选项

javascript - 使用覆盖 promise 默认捕获实现

javascript - 处理 promise 链中的多个捕获

javascript - typescript 提示 promise.then