Comparing version 1.2.0 to 1.2.1
34
index.js
class zPromise { | ||
/** | ||
* | ||
* @param {Number} timeout 超时时间,单位ms | ||
* @param {Object} options | ||
* @param {Number} options.timeout 超时时间,单位ms | ||
*/ | ||
constructor(options = {}) { | ||
let { timeout, message } = options | ||
let callback | ||
@@ -18,11 +17,22 @@ | ||
if (timeout) { | ||
if (options.delay) { | ||
let timeId = setTimeout(() => { | ||
callback.reject(message || `Promise等待超过${timeout}ms`) | ||
promise.state = 'reject' | ||
}, timeout); | ||
let { resolve, reject, delay } = options | ||
let state, value | ||
if (resolve === undefined) { | ||
state = 'reject' | ||
value = reject | ||
} else { | ||
state = 'resolve' | ||
value = resolve | ||
} | ||
let timeout = setTimeout(() => { | ||
callback[state](value) | ||
promise.state = state | ||
}, delay) | ||
promise.resolve = function (data) { | ||
clearTimeout(timeId) | ||
clearTimeout(timeout) | ||
callback.resolve(data) | ||
@@ -33,3 +43,3 @@ promise.state = 'resolve' | ||
promise.reject = function (data) { | ||
clearTimeout(timeId) | ||
clearTimeout(timeout) | ||
callback.reject(data) | ||
@@ -42,9 +52,9 @@ promise.state = 'reject' | ||
promise.resolve = function (data) { | ||
promise.state = 'resolve' | ||
callback.resolve(data) | ||
promise.state = 'resolve' | ||
} | ||
promise.reject = function (data) { | ||
promise.state = 'reject' | ||
callback.reject(data) | ||
promise.state = 'reject' | ||
} | ||
@@ -51,0 +61,0 @@ |
{ | ||
"name": "zpromise", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "Promise简化包装器,用于增强已有ES6 Promise的易用性", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "echo \"Error: no test specified\" && exit 1" | ||
"test": "jtf -w" | ||
}, | ||
"author": "", | ||
"license": "ISC" | ||
"license": "ISC", | ||
"devDependencies": { | ||
"jtf": "^1.1.3" | ||
}, | ||
"directories": { | ||
"test": "test" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/xiangle/zpromise.git" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/xiangle/zpromise/issues" | ||
}, | ||
"homepage": "https://github.com/xiangle/zpromise#readme", | ||
"dependencies": {} | ||
} |
<!-- Promise简化包装器,用于增强已有ES6 Promise的易用性 --> | ||
## Install | ||
### Install | ||
@@ -9,13 +9,13 @@ ``` | ||
## 特性 | ||
### 特性 | ||
* 消除Promise注入函数,直接在Promise实例上调用resolve和reject方法进行状态管理 | ||
* 支持Promise等待超时 | ||
* 支持Promise超时触发resolve或reject,解除无限等待 | ||
* 支持获取Promise实例当前状态 | ||
* 支持获取当前Promise实例状态 | ||
* 支持Promise重启,可复用配置项 | ||
## 示例 | ||
### 示例 | ||
@@ -34,3 +34,3 @@ ```js | ||
### 超时 | ||
#### 超时 | ||
@@ -42,8 +42,8 @@ ```js | ||
let promise = new zPromise({ time: 3000, message: "等待超时" }) | ||
let promise = new zPromise({ delay: 3000, reject: "等待超时" }) | ||
console.log(promise.state) | ||
await promise.catch(message => { | ||
console.error(message) | ||
await promise.catch(error => { | ||
console.error(error) | ||
}) | ||
@@ -59,3 +59,3 @@ | ||
### 重启 | ||
#### 重启 | ||
@@ -67,9 +67,9 @@ ```js | ||
let p1 = new zPromise({ time: 3000, message: "等待超时1" }) | ||
let p1 = new zPromise({ delay: 3000, resolve: { a: 1 } }) | ||
await p1.catch(message => { | ||
console.error(message) | ||
await p1.catch(error => { | ||
console.error(error) | ||
}) | ||
let p2 = p1.restart({ time: 3000, message: "等待超时2" }) | ||
let p2 = p1.restart({ delay: 2000, reject: new Error("等待超时") }) | ||
@@ -94,3 +94,3 @@ p2.then(data => { | ||
## API | ||
### API | ||
@@ -101,6 +101,8 @@ #### zPromise(options) | ||
* `timeout` *Number* 超时时间,单位ms,可选 | ||
* `delay` *Number* 超时时间,单位ms,可选 | ||
* `message` *String* 超时描述信息,可选 | ||
* `reject` * reject超时返回值,默认 | ||
* `resolve` * resolve超时返回值 | ||
#### this.state | ||
@@ -107,0 +109,0 @@ |
@@ -1,27 +0,23 @@ | ||
const zPromise = require('..') | ||
const test = require('jtf'); | ||
const zPromise = require('..'); | ||
const { sleep } = require('./helpers/'); | ||
let promise = new zPromise({ time: 3000 }) | ||
test('time', async t => { | ||
promise.catch(message => { | ||
let promise = new zPromise({ delay: 3000 }) | ||
console.error(message) | ||
promise.catch(message => { | ||
}) | ||
}) | ||
async function run() { | ||
await promise.catch(message => { | ||
console.error(message) | ||
t.equal(undefined, message); | ||
}) | ||
console.log(9999) | ||
t.equal("reject", promise.state); | ||
} | ||
await sleep(1000) | ||
setTimeout(() => { | ||
promise.reject(666) | ||
}, 1000); | ||
run() | ||
}) |
@@ -0,13 +1,40 @@ | ||
const test = require('jtf'); | ||
const zPromise = require('..'); | ||
const { sleep } = require('./helpers/'); | ||
let promise = new zPromise({ time: 3000 }) | ||
test('reject', async t => { | ||
console.log(promise.state) | ||
let promise = new zPromise({ delay: 2000, reject: '等待超时' }) | ||
setTimeout(() => { | ||
promise.catch(function (error) { | ||
promise.resolve() | ||
console.log(promise.state) | ||
}) | ||
}, 1000); | ||
t.deepEqual('pending', promise.state); | ||
await sleep(1000) | ||
t.deepEqual('pending', promise.state); | ||
await sleep(1000) | ||
t.deepEqual('reject', promise.state); | ||
}) | ||
test('resolve', async t => { | ||
let promise = new zPromise({ delay: 2000, resolve: { a: 1 } }) | ||
t.deepEqual('pending', promise.state); | ||
await sleep(1000) | ||
t.deepEqual('pending', promise.state); | ||
await sleep(2000) | ||
t.deepEqual('resolve', promise.state); | ||
}) |
@@ -0,28 +1,28 @@ | ||
const test = require('jtf'); | ||
const zPromise = require('..'); | ||
const { sleep } = require('./helpers/'); | ||
async function run(params) { | ||
test('restart', async t => { | ||
let p1 = new zPromise({ time: 3000, message: "等待超时1" }) | ||
let p1 = new zPromise({ delay: 3000, resolve: "等待超时1" }) | ||
console.log(p1.state) | ||
t.equal('pending', p1.state); | ||
// setTimeout(() => { | ||
// p1.resolve() | ||
// }, 5000); | ||
await p1.catch(message => { | ||
console.error(message) | ||
await p1.catch(error => { | ||
console.error(error) | ||
}) | ||
console.log(p1.state) | ||
t.equal('resolve', p1.state); | ||
let p2 = p1.restart({ time: 3000, message: "等待超时2" }) | ||
t.equal("等待超时1", await p1); | ||
p2.then(message => { | ||
console.error(message, 'then') | ||
}).catch(message => { | ||
console.error(message, 'catch') | ||
let p2 = p1.restart({ delay: 3000, reject: "等待超时2" }) | ||
p2.then(value => { | ||
}).catch(error => { | ||
t.equal("等待超时2", error); | ||
}) | ||
console.log(p2.state) | ||
t.equal("pending", p2.state); | ||
@@ -33,8 +33,6 @@ setTimeout(() => { | ||
console.log(p2.state) | ||
t.equal("reject", p2.state); | ||
}, 5000); | ||
} | ||
run() | ||
}) |
@@ -0,12 +1,15 @@ | ||
const test = require('jtf'); | ||
const zPromise = require('..'); | ||
const { sleep } = require('./helpers/'); | ||
async function run() { | ||
test('time', async t => { | ||
let promise = new zPromise({ | ||
time: 3000, | ||
message: "等待超时" | ||
delay: 3000, | ||
resolve: { a: 1 }, | ||
// reject: '等待超时' | ||
}) | ||
setTimeout(() => { | ||
// promise.resolve() | ||
@@ -16,8 +19,8 @@ | ||
await promise.catch(message => { | ||
console.error(message) | ||
let result = await promise.catch(error => { | ||
console.error(error) | ||
}) | ||
} | ||
t.deepEqual({ a: 1 }, result); | ||
run() | ||
}) |
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
6932
8
133
1
0
120
0
1