Skip to content
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

Merged
merged 1 commit into from
Apr 2, 2024

Commits on Apr 1, 2024

  1. [api-minor] Replace the PromiseCapability with `Promise.withResolve…

    …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).
    Snuffleupagus committed Apr 1, 2024
    1 Configuration menu
    Copy the full SHA
    e4d0e84 View commit details
    Browse the repository at this point in the history