Why is crypto.subtle.digest designed to return a promise?

Every other system I’ve ever worked with has the signature hash(bytes) => bytes, yet whatever committee designed the Subtle Crypto API decided that the browser version should return a promise. Why? I’ve looked around but I’ve never found any discussion on the motivation behind that.

  • vzq@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    1
    ·
    6 months ago

    It’s standard for operations that take a while and can be performed asynchronously.

    What’s your problem with it?

    • Ethan@programming.devOP
      link
      fedilink
      English
      arrow-up
      0
      ·
      6 months ago

      async/await infecting all of my code, being unable to create a get myField() method that involves a hash calculation. It may be standard to do heavy lifting concurrently, but async hash functions are certainly not standard in any of the languages I’ve used (which is quite a few).

      • vzq@lemmy.blahaj.zone
        link
        fedilink
        arrow-up
        1
        ·
        5 months ago

        From browsing your other comments on this thread I understand that you are in a context where you can’t await, that you expect the invocation to take very little time, and that the library offers no complementary sync interface.

        As far was I know you’re stuck in this case. I consider the stubborn refusal to add “resolve this promise synchronously right now” a major flaw in js.

  • Technus@lemmy.zip
    link
    fedilink
    arrow-up
    1
    ·
    6 months ago

    It executes on a native thread in the background. That way it doesn’t stall the Javascript execution loop, even if you give it a gigabyte of data to hash.