Bluebird.resolve(jQuery.ajax)警告承诺被拒绝,非错误[object Object]

时间:2016-10-12 19:16:05

标签: jquery build promise warnings bluebird

问题:当在Bluebird.js中将jQuery.ajax传递给Promise.resolve时,它会在请求失败时抛出警告。

这是正确的行为吗?由于某些我无法找到的原因,当Bluebird直接包含在页面中时,它不会发出此警告。当它与Webpack捆绑在一起时会发出警告。

如果这是正确的行为,在Bluebird中使用jQuery.ajax的正确方法是什么?当Bluebird直接包含在页面中时,为什么不会发生?

更新:在挖掘了一点之后,我发现它只是Bluebird的两个不同版本的差异。未明细化的构建会发出警告,但缩小的构建不会发出警告。有这个原因吗?

更新2:导致警告的原因是:最终附加在承诺上。像这样:

Promise
  .resolve($.getJSON('/notfound'))
  .finally(() => {})
  .catch(() => {});

这会引发警告: https://jsfiddle.net/gf0jk80s/1/

这不会引起警告: https://jsfiddle.net/gf0jk80s/2/

正如您所看到的,唯一的区别是使用的构建版本。如果有人能指出我的代码有什么问题,我真的很感激。理想情况下,我希望它不会导致Bluebird的两个构建版本都出现警告。在示例中,函数是空的,但在实际代码中,我实际上是在这两个处理程序中执行操作。

1 个答案:

答案 0 :(得分:0)

  

在挖了一点之后,我发现它只是一个区别   Bluebird的两个不同版本。未经编译的构建会发出   警告,但缩小的构建没有。有这个原因吗?

这样做是因为未公开的版本被认为是" debug"开发人员在编写和进行初始测试时将使用的库版本,并且更容易使用调试器。它被设计成冗长的警告,告诉开发人员他们可能做错了什么。

缩小版本就像"制作"针对空间进行了优化的库的版本,通常没有必要让应用程序的生产版本向用户的控制台发出警告。

在C / C ++世界中,这类似于DLL的调试版本和DLL的优化版本。调试版本将包含ASSERT()之类的内容,以通知开发人员某些内容不应该是什么,优化版本不会。