Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function some_sync(...ps) {
- return (async () => {
- let errors = []
- while (true) {
- try {
- return await ps[errors.length]
- } catch (error) {
- errors.push(error)
- if (errors.length === ps.length) {
- throw errors
- }
- }
- }
- })()
- }
- function some_async(...ps) {
- return new Promise(function(resolve, reject) {
- let errors = [], resolved = false
- function got_resolve(data) {
- !resolved && resolve(data)
- }
- function got_reject(error, i) {
- errors[i] = error
- if (errors.filter(e => e).length===ps.length) {
- reject(errors)
- }
- }
- ps.forEach((p, i) => p.then(got_resolve).catch(function(error) {
- got_resolve(error, i)
- }))
- })
- }
- function some(...pss) {
- return some_async(...pss.map(ps => some_sync(...ps)))
- }
- // test
- function get(a) {
- return new Promise((resolve,reject)=>{
- // console.log(a);
- setTimeout(function(){
- if (a>0) {
- console.log(a)
- resolve(a)
- } else {
- console.log(a)
- reject(a)
- }
- }, Math.abs(a)*1000)
- });
- }
- some([get(-1), get(-2), get(-1)], [get(3)]).then(n => console.log(n)).catch(e => console.log('err'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement