Существуют такие методы, как Q.reduce
и Q.all
, которые помогают сгладить цепочку обещаний в конкретном случае разнородных коллекций обещаний. Ум, однако, общий случай:Как правильно выразить произвольные цепочки 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
не будет занимать область действия на второй линии. Каков правильный способ справиться с этой ситуацией?
Различные методы здесь: [Как связать предыдущие результаты с обещаниями] (http://stackoverflow.com/questions/28714298/how-to-chain-and-share-prior-results-with-promises/28714863 # 28714863). На самом деле, этот вопрос может быть одним из двух. – jfriend00
@ jfriend00: Это определенно дубликат того же самого, что и дубликат, хорошая находка. –
Определенно дубликат, я вижу. Тем не менее, я думаю, что эта тема становится более поучительной. – MaiaVictor