手写 Promise 实现:从入门到精通
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;
}); };
原文地址: https://www.cveoy.top/t/topic/msSn 著作权归作者所有。请勿转载和采集!