BluebirdJS承诺jQuery无法正常工作

时间:2015-11-13 17:39:13

标签: javascript jquery promise bluebird

使用此处提及的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(在这种情况下为403),并且我再添加一个'.then'时,它总是调用已完成的处理程序。

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

1 个答案:

答案 0 :(得分:3)

当你这样做时:

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

这是有效的:

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

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

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

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