[英]Warning: a promise was rejected with a non-error: [object GeolocationPositionError]
[英]Promise rejected with non-error warning
错误: 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
时,UPDATE警告消息仍然存在:
.fail(function(jqXHR, textStatus, errorThrown) {
reject(new Error(errorThrown))
})
这仅表示抛出的错误不是instanceof Error
的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));
}
例如,在撰写本文时,我还认为有一个Promise来包装ajax对象有点多余,但是说实话我不知道如何重新编写它
您可以定义一个返回AJAX对象的函数,该函数在jQuery docs中声明 ,返回一个使用JavaScript Promise接口的对象。
$ .ajax()从jQuery 1.5开始由$ .ajax()返回的jqXHR对象实现Promise接口,为它们提供Promise的所有属性,方法和行为(有关更多信息,请参见Deferred对象)。
这是如何实现此功能的代码示例。 我正在使用随机用户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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.