Javascript JS承诺的顺序组合

Javascript JS承诺的顺序组合,javascript,es6-promise,Javascript,Es6 Promise,我遇到了以下关于MDN()上承诺的顺序组合的示例: 使用一些聪明的JavaScript可以进行顺序合成: 基本上,我们将异步函数数组简化为一个承诺链,等价于:promise.resolve().then(func1.then(func2.then(func3)) 这可以制作成可重用的组合函数,这在函数式编程中很常见: 我不明白的是,他们为什么写上面代码的最后一行将result3设置为transformData(data),因为transformData(data)本身就是一个承诺 最后一行不是应

我遇到了以下关于MDN()上承诺的顺序组合的示例:

使用一些聪明的JavaScript可以进行顺序合成:

基本上,我们将异步函数数组简化为一个承诺链,等价于:promise.resolve().then(func1.then(func2.then(func3))

这可以制作成可重用的组合函数,这在函数式编程中很常见:

我不明白的是,他们为什么写上面代码的最后一行将
result3
设置为
transformData(data)
,因为
transformData(data)
本身就是一个承诺

最后一行不是应该是:

transformData(data).then((result3) => {
   // Do something with result3 ...
});
?

文件包括:

在ECMAScript 2017中,使用async/await可以更简单地完成顺序合成:

这里的
result
确实是
func3
的结果(成功解决了导致
result3
的承诺)

谢谢你的关注

const applyAsync = (acc,val) => acc.then(val);
const composeAsync = (...funcs) => x => funcs.reduce(applyAsync, Promise.resolve(x));
...
const transformData = composeAsync(func1, func2, func3);
const result3 = transformData(data);
transformData(data).then((result3) => {
   // Do something with result3 ...
});
let result;
for (const f of [func1, func2, func3]) {
  result = await f(result);
}
/* use last result (i.e. result3) */