有一些方法,如Q.reduce
和Q.all
这有助于展平诺言的异类集合的特定情况下诺言链.但请注意,通用案例:
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
因为不在第二行的范围内.处理这种情况的正确方法是什么?