Promise finally

Michael Luder-Rosefield rosyatrandom at gmail.com
Fri Feb 23 14:30:31 UTC 2018


Whenever you chain a promise with a then/finally, you're basically letting
the runtime look at the callbacks at some arbitrary point in the future,
no? So despite being written in a defined order, they will be run in
whatever order eventuates.

On Fri, 23 Feb 2018 at 14:24 Raul-Sebastian Mihăilă <raul.mihaila at gmail.com>
wrote:

> The order is deterministic, as specified, I just don't think it's the
> right order. I don't have a concrete example with finally, but if I were to
> imagine one, say you're writing some tests with jest and you want to make
> some checks in the then callbacks. In order for those checks to be executed
> in good time, you must return a promise from the test callback. If you have
> more promises you have to do a Promise.all in order to make sure that you
> wait for all the promises. If you are able to determine the order in which
> the promises are settled, you can return the one that is settled the last.
> This is perhaps not a convincing example, but if this didn't matter why is
> the order specified?
>
> On Fri, Feb 23, 2018 at 3:59 PM, Viktor Kronvall <
> viktor.kronvall at gmail.com> wrote:
>
>> Since these two Promises aren't chained to one another I wouldn't expect
>> any specific
>> deterministic ordering between the `console.log` statements. Are you
>> suggesting that
>> such a deterministic ordering should be imposed by using micro tasks or
>> what are you
>> proposing here exactly?
>>
>> In other words, why exactly do you expect the result to always be
>> printing 1 before
>> printing 2?
>>
>> 2018年2月23日(金) 19:21 Raul-Sebastian Mihăilă <raul.mihaila at gmail.com>:
>>
>>> I find it weird that
>>>
>>> ```js
>>> Promise.resolve().finally(() => {}).then(() => { console.log(1); });
>>> Promise.resolve().then(() => {}).then(() => { console.log(2); });
>>> ```
>>>
>>> prints 2 and then 1. It would have been possible to spec it in such a
>>> way that it would have printed 1 and 2.
>>>
>>> On the other hand
>>>
>>> ```js
>>> Promise.resolve().finally().then(() => { console.log(1); });
>>> Promise.resolve().then().then(() => { console.log(2); });
>>> ```
>>>
>>> prints 1 and then 2.
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>>>
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180223/9f6cc28e/attachment-0001.html>


More information about the es-discuss mailing list