我很好奇,如果我使用延迟不正确,如果没有 - 是否有更有说服力的方式。 所以,我在人物页面视图中多次触发这个ajax请求。现在,我明白我只能解决一次违约,所以我适当地重置了“def”。但我想知道我是否可以将ajax调用分配给变量,并传入唯一标识符并解决延迟?
我需要在ajax请求的成功或错误上发生事情。
所以,我有一个ajax请求。
// some code. I set some var.
var def = $.Deferred();
// more code
$.ajax({
dataType: "json",
url: url,
data: params,
success: function(d) {
// resolve my deferred and pass a unique identifier
def.resolved('onSucc');
},
error: function(d) {
def.resolved('onErr');
};
});
喜欢什么?
var def = $.ajax({
dataType: "json",
url: url,
data: params,
success: function(d) {
// resolve my deferred and pass a unique identifier
return def.resolved('onSucc');
},
error: function(d) {
return def.resolved('onErr');
};
});
此外,是否需要在此处返回承诺?没有它我的代码似乎工作正常 - 但我很好奇,如果我错过了。
答案 0 :(得分:2)
您实际上并未正确使用延迟。延迟对象用于在making a non-promisified API promisified时从头开始创建承诺链。您使用它的方式称为the deferred anti pattern。
Promises链,因此您可以简单地使用将promise转换为新promise的链接函数then
,而不是恢复为回调和延迟对象:
return $.ajax({
dataType: "json",
url: url,
data: params,
}).then(function(result){
console.log("got result!", result);
return someTransformOn(result); // use return values, can also return promise
}); // error case gets handled for you
可以让你这样做:
functionReturningAjax().then(function(transformedValue){
// access to transformed value here
},function(err){
// then accepts an optional second argument for errors, use it to handle errors.
});