UNPKG

wsemi

Version:

A support package for web developer.

102 lines (97 loc) 2.85 kB
/** * 產生Promise物件,具備鏈式resolve與reject * 主要受jQuery Deferred概念啟發 * * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/genPm.test.mjs Github} * @memberOf wsemi * @returns {Object} 回傳Promise物件 * @example * * async function topAsync() { * * function test1() { * return new Promise((resolve, reject) => { * let ms = [] * * let fn = function(name) { * let pm = genPm() * setTimeout(function() { * ms.push('resolve: ' + name) * pm.resolve('resolve: ' + name) * }, 1) * return pm * } * * fn('abc') * .then(function(msg) { * console.log('t1 then', msg) * ms.push('t1 then: ' + msg) * }) * .catch(function(msg) { * console.log('t1 catch', msg) * ms.push('t1 catch: ' + msg) * }) * .finally(() => { * resolve(ms) * }) * * }) * } * console.log('test1') * let r1 = await test1() * console.log(JSON.stringify(r1)) * // test1 * // t1 then resolve: abc * // ["resolve: abc","t1 then: resolve: abc"] * * function test2() { * return new Promise((resolve, reject) => { * let ms = [] * * let fn = function(name) { * let pm = genPm() * setTimeout(function() { * ms.push('reject: ' + name) * pm.reject('reject: ' + name) * }, 1) * return pm * } * * fn('abc') * .then(function(msg) { * console.log('t1 then', msg) * ms.push('t1 then: ' + msg) * }) * .catch(function(msg) { * console.log('t1 catch', msg) * ms.push('t1 catch: ' + msg) * }) * .finally(() => { * resolve(ms) * }) * * }) * } * console.log('test2') * let r2 = await test2() * console.log(JSON.stringify(r2)) * // test2 * // t1 catch reject: abc * // ["reject: abc","t1 catch: reject: abc"] * * } * topAsync().catch(() => {}) * */ function genPm() { let resolve let reject let p = new Promise(function() { resolve = arguments[0] reject = arguments[1] }) p.resolve = resolve p.reject = reject return p } export default genPm