8000 GitHub - cmc3cn/promise-any: Promise.any() implementation
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

cmc3cn/promise-any

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

promise-any

最简版 promise.any, 实现方式令人拍手称绝

ES6 promises don't provide any(). A small library to implement them. Will convert arguments to promises if not already a promise.

var promiseAny = require('promise-any');

promiseAny([
    Promise.reject('✗'),
    Promise.resolve('✓'),
]).then(function(value) {
    // value is '✓' :)
});

promiseAny([
    Promise.reject('✗'),
    Promise.reject('✗'),
]).catch(function(reasons) {
    // reasons is ['✗', '✗'] :(
});
Promise.any = arr => {
	let reverse = promise => new Promise((resolve, reject) => Promise.resolve(promise).then(reject, resolve));
    	return reverse(Promise.all(arr.map(reverse)));
};

var fn1  = new Promise((resolve, reject) => {
	setTimeout(resolve,1000,'a-1000');
});

var fn2  = new Promise((resolve, reject) => {
	setTimeout(resolve,900,'a-900');
});

var fn3  = new Promise((resolve, reject) => {
	setTimeout(reject,300,'a-300');
});


Promise.any([
    fn1,fn2,fn3
]).then(function(value) {
    console.log(value)  //'a-900'
});

Promise.any 只对第一个实现很感兴趣,

这点不同于 Promise.race

Promise.race([
    fn1,fn2,fn3
]).catch(function(value) {
    console.log(value) //'a-300'
});

Promise.race对第一个返回感兴趣,但是第一个返回可能是 reject状态的,所以从某种意义上来说, 不如promise.any实际意义更大。虽然Promise.race已经被部分内核实现,而Promise.any仍然处于草案

About

Promise.any() implementation

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%
0