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.

  • macniel@feddit.de
    link
    fedilink
    arrow-up
    6
    ·
    5 months ago

    its a good idea to be as non blocking as possible especially on time and resource consuming tasks like IO, cryptography, …

    just use await in an async function.

    • Ethan@programming.devOP
      link
      fedilink
      English
      arrow-up
      4
      arrow-down
      2
      ·
      5 months ago

      just use await in an async function.

      Sure, I’ll just put await and async everywhere. Oh wait, I can’t. A constructor can’t be async so now I need to restructure my code to use async factories instead of constructors. Wonderful…

      • macniel@feddit.de
        link
        fedilink
        arrow-up
        2
        ·
        5 months ago

        Sounds like an architectural issue to begin with. A constructor shouldn’t do the heavy lifting to begin with.

          • macniel@feddit.de
            link
            fedilink
            arrow-up
            4
            arrow-down
            1
            ·
            5 months ago

            The API doesn’t restrict the amount of bytes to be hashed. So yeah it’s still heavy lifting.

            Trigger a loading event after the constructor is finished that the view model takes to calculate your hash.

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

        A constructor can’t be async so now I need to restructure my code to use async factories instead of constructors

        It sounds like you’re trying to do OOD/OOP. In js that’s usually not the way to go. You might want to restructure into a more functional architecture anyway.