I am playing with a javascript library. I am struggling to convert the 
following function to nim:
    
    
    function readBlob(blob) {
        return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.addEventListener('load', () => resolve(reader.result));
            reader.addEventListener('error', reject)
            reader.readAsDataURL(blob);
        })
    }
    
    
    Run

I am looking at [std/asyncjs](https://nim-lang.org/docs/asyncjs.html).

I understand that `readBlob`'s signature in Nim would be:
    
    
    proc readBlob(blob):Future[Data] =
       ##
    
    
    Run

But I am not sure if the right approach would be something like:
    
    
    proc newFileReader*():JsObject {.importcpp:"new FileReader()".}
    
    proc readBlob(blob):Future[Data] {.async.} =
      let reader = newFileReader()
      reader.readAsDataURL(blob)
      return reader.result
    
    
    Run

or should I create a promise for that? This is a bit less clear for me. I don't 
know how to translate. Would it be something like the following?
    
    
    proc newFileReader*():JsObject {.importcpp:"new FileReader()".}
    
    proc readBlob(blob):Future[Data] {.async.} =
      result = newPromise() do (resolve: proc(response: Data)):
        callbackFunc() do ():
          let reader = newFileReader()
          reader.readAsDataURL(blob)
          return reader.result
    
    
    Run

I got the feeling of being completely off.

Reply via email to