Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. function some_sync(...ps) {
  2. return (async () => {
  3. let errors = []
  4. while (true) {
  5. try {
  6. return await ps[errors.length]
  7. } catch (error) {
  8. errors.push(error)
  9. if (errors.length === ps.length) {
  10. throw errors
  11. }
  12. }
  13. }
  14. })()
  15. }
  16.  
  17. function some_async(...ps) {
  18. return new Promise(function(resolve, reject) {
  19. let errors = [], resolved = false
  20. function got_resolve(data) {
  21. !resolved && resolve(data)
  22. }
  23. function got_reject(error, i) {
  24. errors[i] = error
  25. if (errors.filter(e => e).length===ps.length) {
  26. reject(errors)
  27. }
  28. }
  29. ps.forEach((p, i) => p.then(got_resolve).catch(function(error) {
  30. got_resolve(error, i)
  31. }))
  32. })
  33. }
  34.  
  35. function some(...pss) {
  36. return some_async(...pss.map(ps => some_sync(...ps)))
  37. }
  38.  
  39. // test
  40. function get(a) {
  41. return new Promise((resolve,reject)=>{
  42. // console.log(a);
  43. setTimeout(function(){
  44. if (a>0) {
  45. console.log(a)
  46. resolve(a)
  47. } else {
  48. console.log(a)
  49. reject(a)
  50. }
  51. }, Math.abs(a)*1000)
  52. });
  53. }
  54. 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