为了账号安全,请及时绑定邮箱和手机立即绑定

jQuery延迟和承诺-.Then()vs.Done()

jQuery延迟和承诺-.Then()vs.Done()

开心每一天1111 2019-06-28 15:25:37
jQuery延迟和承诺-.Then()vs.Done()我一直在阅读关于jQuery延迟和承诺的文章,我看不出使用.then() & .done()为了成功的回调。我知道呀艾瑞克·海因兹提到.done()和.success()映射到相同的功能,但我猜也是如此.then()因为所有回调都是在一个成功的操作完成后调用的。有人能告诉我正确的用法吗?
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

处理返回结果的方式也有差异(称为链接,done不锁链then生产呼叫链)

promise.then(function (x) { // Suppose promise returns "abc"
    console.log(x);
    return 123;}).then(function (x){
    console.log(x);}).then(function (x){
    console.log(x)})

将记录下列结果:

abc123undefined

promise.done(function (x) { // Suppose promise returns "abc"
    console.log(x);
    return 123;}).done(function (x){
    console.log(x);}).done(function (x){
    console.log(x)})

将得到以下信息:

abc
abc
abc

-更新:

顺便说一下。我忘了提到,如果您返回一个承诺而不是原子类型的值,外部承诺将等待内部承诺解决:

promise.then(function (x) { // Suppose promise returns "abc"
    console.log(x);
    return $http.get('/some/data').then(function (result) {
        console.log(result); // suppose result === "xyz"
        return result;
    });}).then(function (result){
    console.log(result); // result === xyz}).then(function (und){
    console.log(und) // und === undefined, because of absence of return statement in above then})

通过这种方式,组成并行或顺序异步操作变得非常简单,例如:

// Parallel http requestspromise.then(function (x) { // Suppose promise returns "abc"
    console.log(x);

    var promise1 = $http.get('/some/data?value=xyz').then(function (result) {
        console.log(result); // suppose result === "xyz"
        return result;
    });

    var promise2 = $http.get('/some/data?value=uvm').then(function (result) {
        console.log(result); // suppose result === "uvm"
        return result;
    });

    return promise1.then(function (result1) {
        return promise2.then(function (result2) {
           return { result1: result1, result2: result2; }
        });
    });}).then(function (result){
    console.log(result); // result === { result1: 'xyz', result2: 'uvm' }}).then(function (und){
    console.log(und) // und === undefined, because of absence of return statement in above then})

上面的代码并行地发出两个http请求,从而使请求更快地完成,而下面的http请求是按顺序运行的,从而减少了服务器负载。

// Sequential http requestspromise.then(function (x) { // Suppose promise returns "abc"
    console.log(x);

    return $http.get('/some/data?value=xyz').then(function (result1) {
        console.log(result1); // suppose result1 === "xyz"
        return $http.get('/some/data?value=uvm').then(function (result2) {
            console.log(result2); // suppose result2 === "uvm"
            return { result1: result1, result2: result2; };
        });
    });}).then(function (result){
    console.log(result); // result === { result1: 'xyz', result2: 'uvm' }}).then(function (und){
    console.log(und) // und === undefined, because of absence of return statement in above then})


查看完整回答
反对 回复 2019-06-28
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

.done()只有一个回调,这就是成功的回调。

.then()有成功的也有失败的回调

.fail()只有一个失败回调

所以你该怎么做.你在乎它是成功还是失败?


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 654 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信