function MyPromise(fn) { var self = this; self.value = null; self.error = null; self.onFulfilled = null; self.onRejected = null;

function resolve(value) { setTimeout(function() { self.value = value; self.onFulfilled(self.value); }, 0); }

function reject(error) { setTimeout(function() { self.error = error; self.onRejected(self.error); }, 0); }

fn(resolve, reject); }

MyPromise.prototype.then = function(onFulfilled, onRejected) { var self = this; return new MyPromise(function(resolve, reject) { function handle(value) { var ret = typeof onFulfilled === 'function' && onFulfilled(value) || value; try { if (ret && typeof ret.then === 'function') { ret.then(function(value) { resolve(value); }, function(error) { reject(error); }); } else { resolve(ret); } } catch (error) { reject(error); } }

function errback(error) {
  var ret = typeof onRejected === 'function' && onRejected(error) || error;
  reject(ret);
}

self.onFulfilled = handle;
self.onRejected = errback;

}); };

手写 Promise 实现:从入门到精通

原文地址: https://www.cveoy.top/t/topic/msSn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录