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