为了精简代码,下面的Promise实现中去掉了代码校验,这样方便小伙伴看到Promise的核心逻辑。ES6语法。
活很少说,直接放代码promise
class PromiseTest { executor = (resolve, reject) => { } constructor(executor) { this.executor = executor; } then(sucess, error) { let flag = true; let resolveV; let rejectV; const resolve = (value) => { flag = true; resolveV = sucess(value); }; const reject = (value) => { flag = false; rejectV = error(value); }; this.executor(resolve, reject); // onfulfilled onrejected返回参数的传递 这是promise的精髓😀 return new PromiseTest((resolveSub, rejectSub) => { if (flag) { resolveSub(resolveV); } else { rejectSub(rejectV); } }); } }
有没有很简单,下面对照最典型的实用方法非小伙伴讲解一些这个简单的代码。缓存
const promise = new PromiseTest(function(resolve, reject) { if (true){ resolve("sucess"); } else { reject("erorr"); } }); promise.then(function (value) { console.log(value) // => sucess return "sub " + value; }, function (error) { console.log(error) // => erorr return "sub " + error; }).then(function (value) { console.log(value) // => sub sucess }, function (error) { console.log(error) // => sub erorr }); // 回调函数的返回值是能够传递的下一个then回调函数里面,这样能够像元promise同样无限传递下去😀
简单的概括一下,Promise构建的时候把你传入的executor(resolve, reject){}函数缓存到返回的promise对象中,当你调用promise的then方法的时候,就是执行你写的executor(resolve, reject){}函数,并then方法中定义的两个回调函数替换替换到构建Promise时定义的executor(resolve, reject){}中的两个入参。函数
固然promise不会像我说的这么简单,可是核心原理就是这个样的。测试