javascript - 为什么 promise 链可以扁平化?

标签 javascript promise

下面的代码包含两种promise链,看起来它们是等价的,但我不明白为什么它们是等价的。我认为它就像 2*(3+4) = 2*3+4,这是不正确的。

// example1
runAsync1()
.then(function(data1){
    return runAsync2()
    .then(function(data2){
        return runAsync3(); 
    })
})
.then(function(data3){
    console.log(data3);
});

// example 2
runAsync1()
.then(function(data1){
    return runAsync2();
}).then(function(data2){
    return runAsync3();  
}).then(function(data3){
    console.log(data3);
});

最佳答案

也许一些大括号可以帮助你更好地理解这一点。 (注意:这与您所做的完全相同,只是返回时有一组额外的大括号)

// example1
runAsync1()
.then(function(data1){
    return (
        runAsync2()
        .then(function(data2){
            return runAsync3(); 
        })
    )
})
.then(function(data3){
    console.log(data3);
});

那么这里发生了什么,

  1. .thenrunAsynch1()
  2. 上调用 然后在 runAsynch2() 上调用
  3. .then,它返回 runAsynch3()(此返回沿着链一直进行)返回)
  4. 最后在返回的 runAsynch3() 上调用 .then

如您所见,这与示例 2 中发生的过程完全相同

// example 2
runAsync1()
.then(function(data1){
    return runAsync2();
}).then(function(data2){
    return runAsync3();  
}).then(function(data3){
    console.log(data3);
});

关于javascript - 为什么 promise 链可以扁平化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43671330/

相关文章:

javascript - Uncaught ReferenceError : google is not defined

javascript - 使用 jQuery 在 TextArea 中显示 xml

javascript - 如何从本身使用 Promise 的函数返回 Promise?

angularjs - 如何在angularjs中链接promise错误函数

javascript - IE9、showModalDialog() 和 window.close() - 兼容性 View 的怪癖

javascript - 如何为 NodeJS 中的事件扩展对象文字对象?

angularjs - 如何将数据从父元素的指令传递到子元素?

javascript - Redux、Fetch、如何捕获 json()

javascript - 为什么我的代码在await 语句之后不执行?

javascript - 来自后端的数据和带有链接的文本如何在前端变得可点击?