Passing intermediate data between promises in JS without using Promise.all and Promise.resolve

Viewed 720

I'm kind of a JS noob, but so far I really like the ES6 / React / Immutable capability to do functional programming and FRP, and in particular, the promise api. I particularly like the pattern of chaining .then's, eg, somePromiseGenerator().then(...).then(...).catch(...). This is perfect when the flow of asynchronous calls is perfectly linear. However, Often I want to pass results from the top of this chain to the end.

The sub-optimal pattern I've been using looks like:

somePromiseGenrator()
    .then(r => {
        const inter = makeSomeIntermediateResults(r);
        const newPromise = makeNewPromise(r);

        return Promise.all([newPromise, Promise.resolve(inter)]);
    })
    .then(r => {
        handleR0andR1(r[0], r[1]);
    })

this happens, for instance, when i get data from ElasticSearch and want to supplement it with stuff that's in SQL or Neo4J or call out to a secondary API.

Using Promise.all and especially Promise.resolve seems like a waste of effort. Is there a better way to do this work?

3 Answers
Related