UNPKG

@beenotung/tslib

Version:
72 lines (71 loc) 1.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.promisify = promisify; exports.genPromiseCallback = genPromiseCallback; exports.runFinally = runFinally; exports.getPromiseState = getPromiseState; async function promisify(f, args = []) { return new Promise((resolve, reject) => { f(...args, (err, res) => { if (err) { reject(err); } else { resolve(res); } }); }); } function genPromiseCallback() { let resolve; let reject; const p = new Promise((res, rej) => { resolve = res; reject = rej; }); const cb = (err, res) => { if (err) { reject(err); } else { resolve(res); } }; return Object.assign(cb, { promise: p }); } async function runFinally(p, cb) { try { return await p; } catch (e) { return Promise.reject(e); } finally { cb(); } } /** * @description only supported in NodeJS runtime, will throw error in browser runtime */ function getPromiseState(p) { if (typeof require === 'undefined') { throw new Error('only supported in NodeJS runtime'); } // eslint-disable-next-line @typescript-eslint/no-var-requires const util = require('util'); // Promise { <pending> } // Promise { 'the value' } // Promise { <rejected> 'the reason' } let text = util.inspect(p); if (!(text.startsWith('Promise {') && text.endsWith(' }'))) { throw new Error('not a promise'); } text = text.slice('Promise {'.length, -' }'.length).trim(); if (text === '<pending>') { return 'pending'; } if (text.startsWith('<rejected>')) { return 'rejected'; } return 'fulfilled'; }