问题:当在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的两个构建版本都出现警告。在示例中,函数是空的,但在实际代码中,我实际上是在这两个处理程序中执行操作。
答案 0 :(得分:0)
在挖了一点之后,我发现它只是一个区别 Bluebird的两个不同版本。未经编译的构建会发出 警告,但缩小的构建没有。有这个原因吗?
这样做是因为未公开的版本被认为是" debug"开发人员在编写和进行初始测试时将使用的库版本,并且更容易使用调试器。它被设计成冗长的警告,告诉开发人员他们可能做错了什么。
缩小版本就像"制作"针对空间进行了优化的库的版本,通常没有必要让应用程序的生产版本向用户的控制台发出警告。
在C / C ++世界中,这类似于DLL的调试版本和DLL的优化版本。调试版本将包含ASSERT()
之类的内容,以通知开发人员某些内容不应该是什么,优化版本不会。