2017-03-17 83 views
1

以下回调方法之间是否存在技术差异?jQuery Deferred完成vs成功回调

$.ajax({ 
    ... 
    success: function(data, textStatus, jqXHR) { 
    foo(data); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
    bar(); 
    } 
}); 
$.ajax(...) 
    .done(function(data) { 
    foo(data); 
    }) 
    .fail(function() { 
    bar(); 
    }); 
$.ajax(...) 
    .then(function(data) { 
    foo(data); 
    }, function() { 
    bar(); 
    }); 

经验少,我不知道他们是通过datafoo()正确的例子。 (如果我错了,请大家指正。)

随着done/fail,我们无法跟踪像jqXHRtextStatuserrorThrown,等我说的对其他数据?

done/fail方法是否有complete等效?

从你的经验来看,在某些情况下比其他人更好/更优于其他人吗?

如果我同时使用successdone/then,将之前对方肯定一分也不能将先于另一个绝对运行某些?或者正在使用successdone/then完全不推荐?

谢谢大家提前。

+1

[jQuery.ajax处理继续响应:“success:”vs“.done”?]可能重复(http://stackoverflow.com/questions/8840257/jquery-ajax-handling-continue-responses-success- vs-done) – gyre

+3

'.then()'为链接返回一个新的承诺。 '.done()'不。 '.then()'更接近承诺标准(在JQ 3.0中它实际上是标准的,在以前的版本中并不完全)。 '.done()'完全是一个jQuery特定的设计,不受任何承诺标准的约束。 – jfriend00

回答

1

一个jQuery的.done().then()之间差的返回值可以在.then()

改变参见jQuery deferreds and promises - .then() vs .done()

$.Deferred(function(dfd) { 
 
    dfd.resolve(1) 
 
}) 
 
.done(function(n) { 
 
    return n + 1 
 
}) 
 
.then(function(res) { 
 
    console.log(res) // 1 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script>

$.Deferred(function(dfd) { 
 
    dfd.resolve(1) 
 
}) 
 
.then(function(n) { 
 
    return n + 1 
 
}) 
 
.then(function(res) { 
 
    console.log(res) // 2 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
 
</script>