BluebirdJS 承诺 jQuery 无法正常工作

BluebirdJS promise with jQuery not working properly

使用此处提到的 Promise.resolve($.ajax(options)) http://bluebirdjs.com/docs/api/promise.resolve.html 无效。

var $ = require('jquery');
var Promise = require('bluebird');

function makeRequest(options) {

      return Promise.resolve($.ajax(options))
        .then(function(data) { return data; },
              function (error) { return error; });

}

当我调用 url 时 returns 一个错误(在这种情况下为 403),并且我再添加一个 '.then',它总是调用完成的处理程序。

makeRequest(options).then(iAmBeingCalledWhenTheRequestFails, iAmNotBeingCalled);

当你这样做时:

  return Promise.resolve($.ajax(options))
    .then(function(data) { return data; },
          function (error) { return error; });

这有效地做到了:

try {
  return $.ajax(options);
} catch (e){
  return e;
}

当您 return 形成异常处理程序时,Promises 具有像常规同步代码一样的异常处理,您可以从错误中恢复(如 try catch)。如果你想添加错误处理程序 保持链处于拒绝状态 - 你需要 throw 错误。

更好的是,在这种情况下不要附加错误处理程序。

 return Promise.resolve($.ajax(options)); // that's all folks!