Jquery Defered.resolve不传递参数

时间:2018-01-22 07:18:31

标签: javascript jquery promise jquery-deferred

我承诺如下代码。在我用参数解决了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
             });

1 个答案:

答案 0 :(得分:1)

if区块中,您return来自链式then来电的承诺 - 您解决的defer承诺将不会在此处返回。您可以省略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);
    }
}