remote-promises v1.0.0
remote-promises
Create native ES6 promises and resolve them externally.
Get Started
Ensure its installed as a dependency from your console:
npm i remote-promisesThen import the RemotePromise class before attempting the following examples
import { RemotePromise } from 'remote-promises'Remotely Controlling the Promise
I guess this is why you're here – use .resolve() or .reject() to satisfy the promise.
When you do this, the status property changes from "pending" to either "resolved" or "rejected".
// Instantiate a new remote promise
const rp = new RemotePromise()
rp.resolve('some resolved value')
//- rp.reject(new Error("500: The whole system's blown!"))
rp.status // 'resolved'Awaiting a Remote Promise
RemotePromise can be used with the await keyword just like the native promises.
const rp = new RemotePromise()
rp.resolve('any value')
// Use await in an asynchronous context
(async () => {
console.log(await rp) // 'any value'
})()But when await is used with a rejected promise, the rejection is thrown like an error and can be caught.
const rp = new RemotePromise()
// Gotta catch 'em all!
(async () => {
try {
await rp
} catch (reason) {
console.log(reason) // 'pocket monsters'
}
})()
rp.reject('pocket monsters')Using Then and Catch
If you're not a fan of the async/await style, then you can use then/catch as you normally would with promises. These can be chained too.
const rp = new RemotePromise()
// then/catch can be called the promise is satisfied
rp.then(value => console.log('success', value))
rp.catch(reason => console.log('flop', reason)) // 'flop', 'fish'
// Satisfy the promise
rp.reject('fish')
// Cheeky little example involving chains
rp
.catch(() => 'flip')
.then(value => console.log(value)) // 'flip'Involving Types for TypeScript
As with the native promises, you're able to define an interface for a fulfilled promise value.
// Define your structure
interface SomeStructure {
status: 200
result: string
}
// Create a new typed remote promise
const rp = new RemotePromise<SomeStructure>()
// Must resolve with an object according to the type
rp.resolve({
status: 200,
result: 'samosas'
})
// Start writing a callback...
rp.then(val => {
// val is of type SomeStructure
})6 years ago