jam*_*mes 8 javascript ajax jquery promise deferred
错误: h1.js:25 Warning: a promise was rejected with a non-error: [object String]
不完全确定为什么,爱会帮助理解错误以及导致它的原因.仍然学习Promises和AJAX非常感谢!(例如,当我写这篇文章时,我也认为让Promise包装一个ajax对象有点多余,但老实说我不知道如何重新编写它)
var logisticsModule = (function() {
return {
initialize: function() {
dateTimeFxns.getReservedDates.then(
// success
function(reserved_dates) {
console.log("success with value = " + reserved_dates)
},
function(error) {
console.log("error with value = " + error)
}
)
}
}
})();
var dateTimeFxns = {
getReservedDates: new Promise( function(resolve, reject) {
$.ajax({
// some url & data
})
.done(function(result) {
resolve(result)
}
.fail(function(error) {
reject(error)
}
})
}
$(document).ready(function() {
logisticsModule.initialize();
})
Run Code Online (Sandbox Code Playgroud)
当我有.failas 时,UPDATE警告消息仍然存在:
.fail(function(jqXHR, textStatus, errorThrown) {
reject(new Error(errorThrown))
})
Run Code Online (Sandbox Code Playgroud)
Fen*_*ton 11
这只是意味着抛出的错误不是instanceof Error. 例如,以下不是错误,但我可以抛出它,因为......好吧......你可以在 JavaScript 中抛出任何东西。
throw 42;
Run Code Online (Sandbox Code Playgroud)
这给了我们一个美妙的uncaught exception: 42。
要抛出实际错误,请使用Error:
throw new Error('An actual error');
Run Code Online (Sandbox Code Playgroud)
现在在您的特定情况下,您需要传递 jQuery 提供的错误,这不是它传递的第一个参数。它给你一个字符串,所以把它包装在一个错误中......
.fail(function(jqXHR, textStatus, errorThrown ) {
reject(new Error(errorThrown));
}
Run Code Online (Sandbox Code Playgroud)