使用此处提及的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);
答案 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!