【发布时间】:2016-10-13 07:46:14
【问题描述】:
问题:在 Bluebird.js 中将 jQuery.ajax 传递给 Promise.resolve 时,请求失败时会抛出警告。
这是正确的行为吗?由于某种我找不到的原因,当 Bluebird 直接包含在页面中时,它不会发出此警告。当它与 Webpack 捆绑时,它确实会发出警告。
如果这是正确的行为,那么在 Bluebird 中使用 jQuery.ajax 的正确方法是什么?以及为什么直接将 Bluebird 包含在页面中时不会发生这种情况?
更新:稍微挖掘之后,我发现这只是 Bluebird 两种不同版本的区别。未缩小的构建会发出警告,但缩小的构建不会。这是有原因的吗?
更新 2:导致警告的原因是 .finally 附加到承诺。像这样:
Promise
.resolve($.getJSON('/notfound'))
.finally(() => {})
.catch(() => {});
这会导致警告: https://jsfiddle.net/gf0jk80s/1/
这不会导致警告: https://jsfiddle.net/gf0jk80s/2/
如您所见,唯一的区别是使用的构建版本。如果有人能指出我的代码有什么问题,我将不胜感激。理想情况下,我希望它不会对 Bluebird 的两个构建版本造成警告。在示例中,函数是空的,但在实际代码中,我实际上是在这两个处理程序中执行操作。
【问题讨论】:
-
Bluebird 警告是在最新版本的 Bluebird 中添加的。因此,要么您是两种情况,包括不同版本的 Bluebird,要么其中一种情况正在禁用该警告。
-
Bluebird release notes for 3.0.3 说:“第 3 方库拒绝非错误的承诺不再导致警告”。您是否有足够新的 Bluebird 版本来进行此修复。
-
它们都是 3.4.6,因为我在开头的 cmets 中看到了。包含的一个来自 /js/browser/bluebird.min.js,当它被捆绑时,它似乎来自 /js/browser/bluebird.js。
-
已确认:与构建无关。 Bluebird 的缩小版不会发出警告,但普通版会发出警告。不仅是这个警告,还有其他警告,例如“Promise 在处理程序中创建并且未返回”。要进行测试,只需包含一个或另一个。
-
仅供参考,即使在非缩小版本中,您也可以禁用这些警告。
标签: jquery build promise warnings bluebird