nodisappear / notes

学习笔记
0 stars 0 forks source link

Promise #6

Open nodisappear opened 1 year ago

nodisappear commented 1 year ago

Promises/A+ ES6 Promise 详细实现Promise 最简实现Promise

nodisappear commented 1 year ago

setTimeout(() => { console.log("setTimeout") }, 0);

promise.then(function() { console.log("microtask"); });

console.log("macrotask");

// promise // macrotask // setTimeout // microtask


- 通过 setTimeout 将回调函数添加到延迟队列,从而实现回调函数的延迟绑定和异步调用

function Promise(executor) {
_onResolved = null, _onRejected = null;

const resolve = (value) => { setTimeout(() => { _onResolved(value); }); } const reject = (error) => { setTimeout(() => { _onRejected(error); }); }

executor(resolve, reject); }

Promise.prototype.then = function (onResolved, onRejected) { _onResolved = typeof onResolved === 'function' ? onResolved : function() {}; _onRejected = typeof onRejected === 'function' ? onRejected : function() {}; };

const promise = new Promise(function(_resolve, _reject) { const condition = true; if(condition) { _resolve("success"); } else { _reject("failure"); } });

promise.then(function resolve(value){ console.log(value); }, function reject(error) { console.log(error); });

// success


- 实现一个可链式调用的 Promise

function Promise(executor) {
this.data = undefined; this.onResolvedCallback = []; this.onRejectedCallback = [];

const resolve = (value) => { setTimeout(() => { this.data = value; for(let i=0;i<this.onResolvedCallback.length;i++) { this.onResolvedCallbacki; } }); }

const reject = (error) => { this.data = error; setTimeout(() => { for(let i=0;i<this.onRejectedCallback.length;i++) { this.onRejectedCallbacki; } }); }

executor(resolve, reject); }

Promise.prototype.then = function (onResolved, onRejected) { onResolved = typeof onResolved === 'function' ? onResolved : function() {}; onRejected = typeof onRejected === 'function' ? onRejected : function() {};

return new Promise((_resolve, _reject) => { this.onResolvedCallback.push(() => { const res = onResolved(this.data); if(res instanceof Promise) { res.then(_resolve, _reject); } else { _resolve(res); } });
this.onRejectedCallback.push(() => { const res = onRejected(this.data); if(res instanceof Promise) { res.then(_resolve, _reject); } else { _reject(res); } });
}); };

// 设定每个 promise 的执行结果 const conditionOfpromise1 = true, conditionOfpromise2 = true;

const promise1 = new Promise((_resolve, _reject) => { if(conditionOfpromise1) { _resolve("success"); } else { _reject("failure"); } });

const promise2 = promise1.then((value) => { return new Promise((_resolve, _reject) => { if(conditionOfpromise2) { _resolve(${value}, success); } else { _reject(${value}, failure); } }); }, (error) => { return new Promise((_resolve, _reject) => { if(conditionOfpromise2) { _resolve(${error}, success); } else { _reject(${error}, failure); } }); });

promise2.then((value) => { console.log(value); }, (error) => { console.log(error); });