【问题标题】:Jquery Defered.resolve don't pass parameterJquery Deferred.resolve不传递参数
【发布时间】:2018-01-22 15:35:43
【问题描述】:

我承诺如下代码。在我用参数解决了promise之后, 我想在 done() 方法中获取参数。

function splitAndSetTebiskopUrl(tebiskopUrl){
    splits = tebiskopUrl.split("\u0007");
    tebiskopUrl = splits[0];
    var defer = $.Deferred();
    if(splits[1]){
        var cookieValue = splits[1];

        return $.ajax({
            type:'POST', 
            url:'xxxxxxxxxxxx', 
            data:{'cookieValue':cookieValue},

        }).then(function(data){
            if(data && data.cookieValue){
                defer.resolve(tebiskopUrl);

            }else{
                defer.reject("cookie value doesn't exist");
            }
        },
          function(){
            defer.reject("tebiskopCookieSet request error");
        });

    }else{
        defer.resolve(tebiskopUrl);
    }

    return defer.promise(); 
}

参数未传递给 done() 方法。不幸的是,我认为它是未定义的。我看过很多例子。但我找不到问题。

splitAndSetTebiskopUrl(url).done(function(parameter){
                //parameter is undefined
             });

【问题讨论】:

  • @Bergi 我还能用其他什么。你能举个例子吗? .我有两个条件。在第一个条件下,我们必须等待 ajax 结果,在第二个条件下,没有 ajax 我必须返回给定的参数。

标签: javascript jquery promise jquery-deferred


【解决方案1】:

if 块中,您是return 来自链式then 调用的promise - 您解析的defer 的promise 不会在此处返回。您可以省略 return 关键字,代码会起作用,但实际上您应该避免使用 deferred antipattern 并且实际上只需从链中返回承诺:

function splitAndSetTebiskopUrl(tebiskopUrl){
    var splits = tebiskopUrl.split("\u0007");
    tebiskopUrl = splits[0];
    if (splits[1]) {
        return $.ajax({
            type:'POST', 
            url:'xxxxxxxxxxxx', 
            data:{'cookieValue': split[1]},
        }).then(function(data){
            if (data && data.cookieValue) {
                return tebiskopUrl;
            } else {
                throw new Error("cookie value doesn't exist");
            }
        }, function(err) {
            throw new Error("tebiskopCookieSet request error");
        });
    } else {
        return $.when(tebiskopUrl);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2014-01-21
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多