BluebirdJS承诺与jQuery不能正常工作

BluebirdJS promise with jQuery not working properly

本文关键字:工作 常工作 承诺 jQuery 不能 BluebirdJS      更新时间:2023-09-26

使用此处提到的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);

当你这样做时:

  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!