-
Notifications
You must be signed in to change notification settings - Fork 10k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[api-minor] Replace the PromiseCapability
with Promise.withResolvers()
#17854
[api-minor] Replace the PromiseCapability
with Promise.withResolvers()
#17854
Conversation
/botio-linux preview |
From: Bot.io (Linux m4)ReceivedCommand cmd_preview from @Snuffleupagus received. Current queue size: 0 Live output at: http://54.241.84.105:8877/678d40cc0bcb042/output.txt |
From: Bot.io (Linux m4)SuccessFull output at http://54.241.84.105:8877/678d40cc0bcb042/output.txt Total script time: 1.24 mins Published |
c5692b6
to
d7f45fe
Compare
/botio test |
From: Bot.io (Linux m4)ReceivedCommand cmd_test from @Snuffleupagus received. Current queue size: 0 Live output at: http://54.241.84.105:8877/2c352b25ce5b0e2/output.txt |
From: Bot.io (Windows)ReceivedCommand cmd_test from @Snuffleupagus received. Current queue size: 0 Live output at: http://54.193.163.58:8877/7e51f14bda71aca/output.txt |
From: Bot.io (Linux m4)FailedFull output at http://54.241.84.105:8877/2c352b25ce5b0e2/output.txt Total script time: 26.24 mins
Image differences available at: http://54.241.84.105:8877/2c352b25ce5b0e2/reftest-analyzer.html#web=eq.log |
From: Bot.io (Windows)FailedFull output at http://54.193.163.58:8877/7e51f14bda71aca/output.txt Total script time: 44.68 mins
Image differences available at: http://54.193.163.58:8877/7e51f14bda71aca/reftest-analyzer.html#web=eq.log |
…rs()` This replaces our custom `PromiseCapability`-class with the new native `Promise.withResolvers()` functionality, which does *almost* the same thing[1]; please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers The only difference is that `PromiseCapability` also had a `settled`-getter, which was however not widely used and the call-sites can either be removed or re-factored to avoid it. In particular: - In `src/display/api.js` we can tweak the `PDFObjects`-class to use a "special" initial data-value and just compare against that, in order to replace the `settled`-state. - In `web/app.js` we change the only case to manually track the `settled`-state, which should hopefully be OK given how this is being used. - In `web/pdf_outline_viewer.js` we can remove the `settled`-checks, since the code should work just fine without it. The only thing that could potentially happen is that we try to `resolve` a Promise multiple times, which is however *not* a problem since the value of a Promise cannot be changed once fulfilled or rejected. - In `web/pdf_viewer.js` we can remove the `settled`-checks, since the code should work fine without them: - For the `_onePageRenderedCapability` case the `settled`-check is used in a `EventBus`-listener which is *removed* on its first (valid) invocation. - For the `_pagesCapability` case the `settled`-check is used in a print-related helper that works just fine with "only" the other checks. - In `test/unit/api_spec.js` we can change the few relevant cases to manually track the `settled`-state, since this is both simple and *test-only* code. --- [1] In browsers/environments that lack native support, note [the compatibility data](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers#browser_compatibility), it'll be polyfilled via the `core-js` library (but only in `legacy` builds).
d7f45fe
to
e4d0e84
Compare
/botio unittest |
From: Bot.io (Linux m4)ReceivedCommand cmd_unittest from @Snuffleupagus received. Current queue size: 0 Live output at: http://54.241.84.105:8877/b50e1ee01b54dfb/output.txt |
From: Bot.io (Windows)ReceivedCommand cmd_unittest from @Snuffleupagus received. Current queue size: 0 Live output at: http://54.193.163.58:8877/c45446bc80fde70/output.txt |
From: Bot.io (Linux m4)SuccessFull output at http://54.241.84.105:8877/b50e1ee01b54dfb/output.txt Total script time: 2.38 mins
|
From: Bot.io (Windows)SuccessFull output at http://54.193.163.58:8877/c45446bc80fde70/output.txt Total script time: 11.64 mins
|
It's really nice that this custom helper can now be replaced with a supported JS language feature. Thanks! |
For those people processing PDF document in server side receiving message |
This PR caused a butterfly effect, many users need to fix compatibility errors. |
There won't be any issues if you, as already mentioned in #17854 (comment), use a |
Can you point to an older version that doesn't rely on |
This replaces our custom
PromiseCapability
-class with the new nativePromise.withResolvers()
functionality, which does almost the same thing[1]; please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolversThe only difference is that
PromiseCapability
also had asettled
-getter, which was however not widely used and the call-sites can either be removed or re-factored to avoid it. In particular:src/display/api.js
we can tweak thePDFObjects
-class to use a "special" initial data-value and just compare against that, in order to replace thesettled
-state.web/app.js
we change the only case to manually track thesettled
-state, which should hopefully be OK given how this is being used.web/pdf_outline_viewer.js
we can remove thesettled
-checks, since the code should work just fine without it. The only thing that could potentially happen is that we try toresolve
a Promise multiple times, which is however not a problem since the value of a Promise cannot be changed once fulfilled or rejected.web/pdf_viewer.js
we can remove thesettled
-checks, since the code should work fine without them:_onePageRenderedCapability
case thesettled
-check is used in aEventBus
-listener which is removed on its first (valid) invocation._pagesCapability
case thesettled
-check is used in a print-related helper that works just fine with "only" the other checks.test/unit/api_spec.js
we can change the few relevant cases to manually track thesettled
-state, since this is both simple and test-only code.[1] In browsers/environments that lack native support, note the compatibility data, it'll be polyfilled via the
core-js
library (but only inlegacy
builds).