@superjs/wait

1.1.6 • Public • Published

@superjs/wait

await anything synchronously.

Thought

Useful when you want to get the result of async operation inside a synchronous function,

while rewriting the synchronous function to be an async one is not possible. (Maybe it's in 3rd party library, or a predefined callback like event handler, etc)

API

wait(awaitable)

awaitable: a value can be awaited, which meas everything

return the resolved value of awaitable or throw the rejected error,

just like using await, but synchronously.

Example

const wait = require('@superjs/wait')
const su = require('superagent')
let resp = wait(su('https://api.npms.io/v2/search?q=scope:superjs')) //async http request 
console.log(resp.body) // result is printed synchronously

Use together with @superjs/cb

wait can resolve an operation which returns a promise, but not an operation which needs a callback.

you can either:

  1. wrap the operation to return a promise
  2. just call the operation, using @superjs/cb as callback, like below
const Cb = require('@superjs/cb')
const wait = require('@superjs/wait')

foo(1,2,Cb().arr) 
// wait instead of await
let result = wait(Cb.pop()) 
// print [3,-1] one second later
console.log(result) 

function foo(a,b,cb){
  setTimeout(()=>cb(a+b,a-b),1000)
}

Also useful as debug tool

When being paused on a breakpoint, you can evaluate expressions but no async operations can be evaluated immediately.

Using @superjs/wait, you can evaluate an async operation, get the result of it, while still being paused on the breakpoint.

Just evaluate wait(anyAsyncOperation()), you will see the async operation gets done and returned.

You don't even have to require @superjs/wait in your code. Just install @superjs/wait as a devDependency. When debugging, evaluate global.wait=process.mainModule.require('@superjs/wait'). That's all.

Package Sidebar

Install

npm i @superjs/wait

Weekly Downloads

1

Version

1.1.6

License

MIT

Unpacked Size

4.73 kB

Total Files

5

Last publish

Collaborators

  • mr_jin