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