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