【问题标题】:Rejecting A jQuery Promise In A $.ajax Success Method在 $.ajax Success 方法中拒绝 jQuery Promise
【发布时间】:2016-08-21 17:30:08
【问题描述】:

这可能是一个愚蠢的错误,但在这里。

我需要在 $.ajax() 调用的成功函数中拒绝 jQuery Promise。返回值“success”是一个布尔值。

    function doSomething() {

        var myPromise = $.ajax({

            method: "POST",
                url: "/url/to/use",
                data: {"value":$("#value").val()},
                success: function(data) {
                    if (data.success == false) {
                        ConfirmMessage.showErrorMessage(data.messages[0]);
                        return new $.Deferred().reject().promise();
                    } else {
                        // do other stuff
                    }
                }
            });

            return myPromise;

        }

doSomething() 稍后在 then() 链中使用:

doSomething().then(doSomethingElse).then(soOn).then(soForth);

所以我需要能够拒绝承诺并打破链条。

帮助表示赞赏。

【问题讨论】:

  • 你不能在一个 ajax 承诺被解决后拒绝它。也许您可以返回另一个在 ajax 回调中标记为已解决或被拒绝的 promise 对象,而不是返回 ajax promise 本身。

标签: javascript jquery ajax


【解决方案1】:

你不能通过success 回调来做到这一点。无论如何都没有理由使用一个。只需使用then

function doSomething() {
    return $.ajax({
        method: "POST",
        url: "/url/to/use",
        data: {"value":$("#value").val()},
    }).then(function(data) {
        if (data.success == false) {
            ConfirmMessage.showErrorMessage(data.messages[0]);
            return new $.Deferred().reject().promise();
        } else {
            // do other stuff
        }
    });
}

【讨论】:

  • 做到了。希望这将是一段时间内最后一个与 JQ 承诺相关的问题。谢谢。
  • .promise()到底是什么意思?是可选的吗?
  • @TobiG。 api.jquery.com/deferred.promise - 是的,没有它也可以工作,但我认为不返回延期更干净。这些天来,我推荐dodge the jQuery promise implemenation,它允许您在then 回调中只使用throw
猜你喜欢
  • 2018-03-15
  • 2015-06-07
  • 2020-09-17
  • 2016-11-10
  • 1970-01-01
  • 2013-08-02
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多