Proposal: `await.all {...}` for parallelism
manuelbarzi
manuelbarzi at gmail.com
Mon Nov 25 17:04:59 UTC 2019
yet smaller, as Promise.resolve() was totally redundant here...
// NOTE async {} = asynchronous scope (it groups parallel awaits => `await||`)
// NOTE p? = function call that returns a promise (? = just and index)
async {
const x1 = await || p1()
const x2 = await p2(x1)
const x3 = await || p3()
const x10 = await p10(x2, x3)
let x4, x5, x6
async {
x4 = await || p4(x1, x2)
x5 = await || p5(x2, x3)
x6 = await p6(x4, x5, x10)
}
let x7, x8, x9
async {
x7 = await || p7(x4, x6)
x8 = await p8(x6, x7)
x9 = await || p9(x5, x6)
}
await p11(x8, x9)
}
Promise.all([p1(), p3()])
.then((x1, x3) =>
p2(x1)
.then(x2 =>
p10(x2, x3)
.then(x10 => {
let x4, x5, x6
return Promise.all([p4(x1, x2), p5(x2, x3)])
.then(results => [x4, x5] = results)
.then(() => p6(x4, x5, x10))
.then(_x6 => x6 = _x6)
.then(() => {
let x7, x8, x9
return Promise.all([p7(x4, x6), p9(x5, x6)])
.then(results => [x7, x9] = results)
.then(() => p8(x6, x7))
.then(_x8 => x8 = _x8)
.then(() => p11(x8, x9))
})
})
)
)
On Mon, Nov 25, 2019 at 5:57 PM manuelbarzi <manuelbarzi at gmail.com> wrote:
> a few little corrections...
>
>
> // NOTE async {} = asynchronous scope (it groups parallel awaits => `await||`)
> // NOTE p? = function call that returns a promise (? = just and index)
>
> async {
> const x1 = await || p1()
> const x2 = await p2(x1)
> const x3 = await || p3()
> const x10 = await p10(x2, x3)
>
> let x4, x5, x6
>
> async {
> x4 = await || p4(x1, x2)
> x5 = await || p5(x2, x3)
> x6 = await p6(x4, x5, x10)
> }
>
> let x7, x8, x9
>
> async {
> x7 = await || p7(x4, x6)
> x8 = await p8(x6, x7)
> x9 = await || p9(x5, x6)
> }
>
> await p11(x8, x9)
> }
>
> Promise.resolve()
> .then(() => Promise.all([p1(), p3()]))
> .then((x1, x3) =>
> p2(x1)
> .then(x2 =>
> p10(x2, x3)
> .then(x10 => {
> let x4, x5, x6
>
> return Promise.resolve()
> .then(() => Promise.all([p4(x1, x2), p5(x2, x3
> )]))
> .then(results => [x4, x5] = results)
> .then(() => p6(x4, x5, x10))
> .then(_x6 => x6 = _x6)
> .then(() => {
> let x7, x8, x9
>
> return Promise.resolve()
> .then(() => Promise.all([p7(x4, x6),
> p9(x5, x6)]))
> .then(results => [x7, x9] = results)
> .then(() => p8(x6, x7))
> .then(_x8 => x8 = _x8)
> .then(() => p11(x8, x9))
> })
> })
> )
> )
>
>
>
>
> On Mon, Nov 25, 2019 at 5:41 PM manuelbarzi <manuelbarzi at gmail.com> wrote:
>
>> Hi Manuel! Would you mind explaining the added value of your proposal? I
>>> am only seeing it being more verbose, but I've not found any added
>>> functionality or benefit from it
>>>
>>
>> the proposal combines parallel and series async / await and could
>> resolve complex trees, like the following example:
>>
>> ```
>>
>> // NOTE async {} = asynchronous scope (it groups parallel awaits => `await||`)
>> // NOTE p? = function call that returns a promise (? = just and index)
>>
>> async {
>> const x1 = await|| p1()
>> const x2 = await p2(x1)
>> const x3 = await|| p3()
>> const x10 = await p10(x2, x3)
>>
>> let x4, x5, x6
>>
>> async {
>> x4 = await|| p4(x1, x2)
>> x5 = await|| p5(x2, x3)
>> x6 = await p6(x4, x5, x10)
>> }
>>
>> let x7, x8, x9
>>
>> async {
>> x7 = await|| p7(x4, x6)
>> x8 = await p8(x6, x7)
>> x9 = await|| p9(x5, x6)
>> }
>>
>> await p11(x8, x9)
>> }
>>
>> // it would resolve a tree of parallel and series like following with
>> traditional promises
>>
>> Promise.resolve()
>> .then(() => Promise.all([p1, p3]))
>> .then((x1, x3) =>
>> p2(x1)
>> .then(x2 =>
>> p10(x2, x3)
>> .then(x10 => {
>> let x4, x5, x6
>>
>> return Promise.resolve()
>> .then(() => Promise.all([p4(x1, x2), p5(x2,
>> x3)]))
>> .then(results => [x4, x5] = results)
>> .then(() => p6(x4, x5, x10))
>> .then(x6 => {
>> let x7, x8, x9
>>
>> return Promise.resolve()
>> .then(() => Promise.all([p7(x4, x6),
>> p9(x5, x6)]))
>> .then(results => [x7, x9] = results)
>> .then(() => p8(x6, x7))
>> .then(_x8 => x8 = _x8)
>> .then(() => p11(x8, x9))
>> })
>> })
>> )
>> )
>> ```
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20191125/33c708fa/attachment-0001.html>
More information about the es-discuss
mailing list