错误: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();
})
当.fail
为.fail(function(jqXHR, textStatus, errorThrown) {
reject(new Error(errorThrown))
})
时,UPDATE警告消息仍然存在:
FROM php:7-fpm
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint
ENTRYPOINT ["docker-entrypoint"]
答案 0 :(得分:4)
这只是意味着抛出的错误不是instanceof Error
。例如,以下不是错误,但我可以抛出它,因为......好吧......你可以用JavaScript抛出任何东西。
throw 42;
这给了我们一个很棒的uncaught exception: 42
。
要抛出实际错误,请使用Error
:
throw new Error('An actual error');
现在在你的特定情况下,你需要传递jQuery提供的错误,这不是它传递的第一个参数。它为您提供了一个字符串,因此将其包装成错误...
.fail(function(jqXHR, textStatus, errorThrown ) {
reject(new Error(errorThrown));
}
答案 1 :(得分:0)
例如,在我写这篇文章时,我也认为让Promise包装一个ajax对象有点多余,但说实话,我不知道如何重写它,否则
您可以定义一个返回AJAX对象的函数,该函数在jQuery docs中声明,返回一个使用JavaScript Promise接口的对象。
jQuery 1.5中$ .ajax()返回的jqXHR对象实现了Promise接口,为它们提供了Promise的所有属性,方法和行为(有关详细信息,请参阅Deferred对象)。
以下是如何实现此类功能的代码示例。我使用Random User API作为示例数据。
function getRandomUser() {
return $.ajax({
url: 'https://randomuser.me/api/',
dataType: 'json'
})
.fail(error => console.error(error));
}
// getRandomUser's return value is a Promise like object, which we can chain onto
getRandomUser()
.then(
function(random_user) {
console.log("success with value = ", random_user)
},
function(error) {
console.log("error with value = ", error)
}
);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;