Guest User

Untitled

a guest
Feb 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. const slice = Array.prototype.slice;
  2.  
  3. module.exports = co['default'] = co.co = co;
  4.  
  5. function co(gen) {
  6. const ctx = this;
  7. const args = Array.from(arguments).slice(1)
  8.  
  9.  
  10. return new Promise(function (resolve, reject) {
  11. if (typeof gen === 'function') gen = gen.apply(ctx, args)
  12. if (!gen || typeof gen.next !== 'function') return resolve(gen)
  13.  
  14. onFulfilled();
  15.  
  16. function onFulfilled(res) {
  17. let ret;
  18. try {
  19. ret = gen.next(res)
  20. } catch (e) {
  21. return reject(e);
  22. }
  23.  
  24. next(ret);
  25. return null
  26. }
  27.  
  28. function next(ret) {
  29. console.log(ret)
  30. if (ret.done) return resolve(ret.value);
  31. let value = toPromise.call(ctx, ret.value);
  32. if (value && isPromise(value)) return value.then(onFulfilled, onRejected)
  33. }
  34. })
  35. }
  36.  
  37. function toPromise(obj) {
  38. return obj
  39. }
  40. function isPromise(obj) {
  41. return 'function' == typeof obj.then;
  42. }
  43. function onRejected() {
  44. console.log("onRejected")
  45. }
  46. function arrayToPromise(obj) {
  47. return Promise.all(obj.map(toPromise, this));
  48. }
  49.  
  50. co(function* () {
  51. // resolve multiple promises in parallel
  52. var a = Promise.resolve(1);
  53. var resa = yield a;
  54. var b = Promise.resolve(2);
  55. var resb = yield b;
  56. var c = Promise.resolve(3);
  57. var resc = yield c;
  58. console.log(resa, resb, resc);
  59. // => [1, 2, 3]
  60. return [resa, resb, resc]
  61. }).catch(onerror);
  62. console.log("完成")
  63. function onerror(err) {
  64. // log any uncaught errors
  65. // co will not throw any errors you do not handle!!!
  66. // HANDLE ALL YOUR ERRORS!!!
  67. console.error(err.stack);
  68. }
Add Comment
Please, Sign In to add comment