Sorry but that is not how Promises work. You compose the entire
promise chain in one "tick" and then you start execution of the entire
chain.

I will try to write you an over simplification of the concept... Hang on :)
On Fri, Sep 7, 2018 at 9:35 PM Peter Jaszkowiak <[email protected]> wrote:
>
> No, it doesn't make any sense.
>
> Do you not see the impossibility of this? If you have a promise `a`:
>
> You call `b = a.then(one).finally(done)`
>
> `b` is a promise. You can't have the thread waiting forever for every 
> possible descendent to be added before executing the `done` function. There 
> may even be none.
>
> On Fri, Sep 7, 2018, 13:27 Jon Ronnenberg <[email protected]> wrote:
>>
>> I'm suggesting that finally is the last function to be executed. So
>> the chain is, then().then().then().catch().finally(), regardless of at
>> what time then or catch is added to the Promise chain.
>> Like try->catch->finally with a callback but  without a callback. Does
>> it make sense?
>> On Fri, Sep 7, 2018 at 9:24 PM Peter Jaszkowiak <[email protected]> wrote:
>> >
>> > There are plenty of ways of doing what you need without changing the 
>> > behavior of finally. Are you suggesting that calling finally make it so 
>> > any other then or catch call just not execute? And are you also suggesting 
>> > that this should climb up the chain of promises?
>> >
>> > On Fri, Sep 7, 2018, 13:16 Jon Ronnenberg <[email protected]> wrote:
>> >>
>> >> I know I am late to the game and that Promise.prototype.finally is 
>> >> already in stage 4 but(!).
>> >>
>> >> It's just not very useful to have a final function when it's not the 
>> >> final function to run. If it's suppose to be for cleanup, then the 
>> >> current implementation is seriously lacking usefulness.
>> >>
>> >> Consider the following example:
>> >>
>> >> <audio
>> >>   class="i-am-the-element"
>> >>   autoplay="autoplay"
>> >>   controls="controls">
>> >>     <source type="audio/mp3" 
>> >> src="http:\/\/play.dogmazic.net\/play\/index.php?type=song&oid=22951&uid=-1&name=Black%20poetry%20-%20Aime-.mp3">
>> >> </audio>
>> >> <script>
>> >>   class Demo {
>> >>     constructor (element) {
>> >>       this.node = element
>> >>     }
>> >>     destroy () {
>> >>       return new Promise(resolve => {
>> >>         // do something or nothing
>> >>         resolve()
>> >>       }).finally(() => {
>> >>         // schedule for DOM removal
>> >>         this.node = null
>> >>       })
>> >>     }
>> >>   }
>> >>
>> >>   const demo = new Demo(document.querySelector('.i-am-the-element'))
>> >>
>> >>   setTimeout(() => {
>> >>     demo.destroy().then(() => {
>> >>    // will throw an error because finally was run before
>> >>       demo.node.pause()
>> >>     }).catch(console.error)
>> >>   }, 3000)
>> >> </script>
>> >>
>> >> One grand idea about promises is to delegate and compose asynchronous 
>> >> functions, but the current implementation can not be used to for code 
>> >> delegation.
>> >>
>> >> From the top of my head the only way to have consumer code,  tap into an 
>> >> execution process is to use callbacks which is what Promises were suppose 
>> >> to help alleviate.
>> >>
>> >> <audio
>> >>   class="i-am-the-element"
>> >>   autoplay="autoplay"
>> >>   controls="controls">
>> >>     <source type="audio/mp3" 
>> >> src="http:\/\/play.dogmazic.net\/play\/index.php?type=song&oid=22951&uid=-1&name=Black%20poetry%20-%20Aime-.mp3">
>> >> </audio>
>> >> <script>
>> >>   class Demo {
>> >>     constructor (element) {
>> >>       this.node = element
>> >>     }
>> >>     destroy (callback) {
>> >>       // do something or nothing
>> >>       try {
>> >>         callback()
>> >>       } finally {
>> >>         // schedule for DOM removal
>> >>         this.node = null
>> >>       }
>> >>     }
>> >>   }
>> >>
>> >>   const demo = new Demo(document.querySelector('.i-am-the-element'))
>> >>
>> >>   setTimeout(() => {
>> >>     demo.destroy(() => {
>> >>       demo.node.pause()
>> >>     })
>> >>   }, 3000)
>> >> </script>
>> >>
>> >> If at all possible, please amend to the spec before it's too late! ... or 
>> >> just drop it.
>> >>
>> >> My current use-case is that I work with PSPDFKit and can not get DOM 
>> >> access but rather schedule removal of DOM nodes via their API, but I can 
>> >> pause audio/video - just not using Promise.prototype.finally as it is 
>> >> currently envisioned.
>> >>
>> >> Regards, Jon
>> >>
>> >> PS. Tested in Firefox 63.0b3 and Safari 11.1.2
>> >> Here is a polyfill if you need: 
>> >> https://cdn.polyfill.io/v2/polyfill.minify.js?features=Promise.prototype.finally&amp;flags=gated
>> >>
>> >> _______________________________________________
>> >> es-discuss mailing list
>> >> [email protected]
>> >> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to