我 promise 如下代码。在我用参数解决了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
});
最佳答案
在 if
block ,你是return
来自束缚的 promise then
来电- promise defer
您解决的问题不会返回此处。您可以忽略 return
关键字和代码可以工作,但实际上你应该避免 deferred antipattern实际上只是从链中返回 promise :
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);
}
}
关于javascript - Jquery Deferred.resolve不传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48376375/