promise-synchronizer
Version:
synchronize promise
51 lines (39 loc) • 886 B
JavaScript
function _interopDefault(ex) {
return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex
}
var deasync = require('deasync')
var isPromise = _interopDefault(require('p-is-promise'))
function syncFunction(asyncFunction) {
return function (...functionArguments) {
return sync(asyncFunction(...functionArguments))
}
}
function sync(promise) {
if (typeof promise === 'function') {
return syncFunction(promise)
}
if (!isPromise(promise)) {
return promise
}
let resolved = false
let rejected = false
let result
let error
promise.then(
(value) => {
resolved = true
result = value
},
(rejectedError) => {
rejected = true
error = rejectedError
}
)
deasync.loopWhile(() => !resolved && !rejected)
if (rejected) {
throw error
}
return result
}
module.exports = sync