Jquery Defered.resolve 不传递参数

Jquery Defered.resolve don't pass parameter

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

if 块中,您正在 return 链接 then 调用的承诺 - 您解析的 defer 的承诺将不会是 return在这里。您可以省略 return 关键字并且代码可以工作,但实际上您应该避免 deferred antipattern 并且实际上只是 return 链中的承诺:

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);
    }
}