重复的Ajax调用解决延迟不同,如何?

时间:2014-05-12 04:19:30

标签: javascript jquery promise jquery-deferred

我很好奇,如果我使用延迟不正确,如果没有 - 是否有更有说服力的方式。 所以,我在人物页面视图中多次触发这个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');
                    };

    });

此外,是否需要在此处返回承诺?没有它我的代码似乎工作正常 - 但我很好奇,如果我错过了。

1 个答案:

答案 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.
});