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