【问题标题】:JQuery Promise: fail() called without waiting for promise to resolveJQuery Promise:调用失败()而不等待承诺解决
【发布时间】:2016-04-13 03:17:19
【问题描述】:

我有以下 jQuery 承诺(使用 TypeScript)。奇怪的是,fail() 中的操作被立即调用 - 错误消息被写入控制台 - 即使承诺随后成功解决:

            this.jQuery.getJSON(this.options.searchUrl, queryFilter)
                       .done(this.orderLinesCallback)
                       .fail(console.log("Error on retrieving orders"));

【问题讨论】:

  • 如何确保promise成功解决?
  • 试试.fail( function(){ console.log("Error on retrieving orders") } )。您实际上执行了console.log() 并使用返回值(undefined)作为fail() 的回调。
  • 显而易见的事情总是被忽视。 @Sirko 是正确的。你只是一直在运行console,因为它不在匿名函数中:)
  • 另一件事:done() 函数的回调将失去其作用域。如果范围是必要的,您可能需要将.bind( this ) 添加到其中。
  • 我的错。是的,done() 调用了一个函数,但 fail() 没有。

标签: javascript jquery typescript xmlhttprequest promise


【解决方案1】:

donefail 参数必须是函数:

.done(this.orderLinesCallback)
.fail(function(e, f, g) {
    console.log("Error on retrieving orders");
});

这样做保证console.log("Error on retrieving orders");仅在匿名函数(fail的参数)被调用时执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2018-09-09
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多