繁体   English   中英

承诺被拒绝且没有错误警告

[英]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 Errorinstanceof 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM