大佬教程收集整理的这篇文章主要介绍了javascript – 如何在没有“缩进金字塔”的情况下正确表达任意Promise链?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
const F = (X) => x; const a = F(1); const b = F(2); const c = F(a + b); const d = F(a + c); const e = F(b + c); console.log(E);
也就是说,每个术语依赖于任意先前定义的术语的一系列赋值.假设F是异步调用:
const F = (X) => Q.delay(1000).return(X);
在没有生成缩进金字塔的情况下,我无法想到表达该模式:
F(100).then(a => F(200).then(b => F(a+b).then(c => F(a+C).then(d => F(b+C).then(e => F(d+E).then(f => console.log(f) ) ) ) ) ) );
请注意,使用返回的值不起作用:
F(100).then(a => F(200)) .then(b => F(a+b)) .then(c => F(a+C)) .then(d => F(b+C)) .then(e => F(d+E)) .then(f => console.log(f));
例如,因为a不在第二行的范围内.处理这种情况的正确方法是什么?
>做你做过的事
>将变量放在链外,并随时分配它们
>让整个事物绕过一个带有a,b的对象,并将其作为属性
#1是我坚持的,除非有充分的理由去做其他两个中的任何一个.幸运的是,这种积累很少像你的问题所示那么深.
如果你想早期采用async / await(the proposal完成,它们将在ES2017中,你现在可以使用它们转换器),然后参见Sterling’s answer,了解它们如何简化它.这是一个有效的例子(live on Babel’s REPL):
const F = x => { return new Promise(resolve => { setTimeout(() => { resolve(X); },100); }); }; (async () => { const a = await F(100); const b = await F(200); const c = await F(a+b); const d = await F(a+c); const e = await F(b+c); const f = await F(d+E); console.log(f); })();
以上是大佬教程为你收集整理的javascript – 如何在没有“缩进金字塔”的情况下正确表达任意Promise链?全部内容,希望文章能够帮你解决javascript – 如何在没有“缩进金字塔”的情况下正确表达任意Promise链?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。