tjwyz
tjwyz
```javascript function debounce (fn, time) { let handle; return (...arg) => { if (handle) { clearTimeout(handle); } handle = setTimeout(()=>{ fn(...arg); }, time) } } function throttle(fn, time) { let...
做戏做全套... 写一个更有助于理解 ps: 微任务以宏任务(setTimeout)替代 ```javascript class PromiseA { constructor(fn) { this.status = 'pending'; this.value = null; this.error = null; this.resolveArr = []; this.rejectArr = []; let resolve = (value) =>...
```javascript function flat(arr) { let ret = []; arr.forEach(item => { if (+item === item) { ret.push(item); } else { ret = ret.concat(flat(item)); } }) return ret; } ```
```javascript static all(arr) { return new PromiseA((resolve, reject)=>{ let i = 0; let ret = []; while(arr.length) { let tmp = arr.shift(); tmp.then((param)=>{ ret[i] = param; i++ if (i ==...
本质是希望实现一个co函数 ```javascript let delay = function (time, fnc) { setTimeout(() => { fnc(time); }, time); } let promisefy = (fn) => { return (...arg) => { return new Promise ((resolve,...
```javascript static race(arr) { // 只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。 return new PromiseA((resolve, reject) => { arr.forEach((item)=>{ // “状态的变更是单向的” item.then(resolve, reject); }) }) } ```
```javascript PromiseA.prototype.finally = (fn) => { // 保证了fn执行在前.. 但是有点绕 return this.then((param)=>{ // 万一 fn reject了 return PromiseA.resolve(fn()).then(()=>param, ()=>param); }, (err) =>{ // 万一 fn reject了 return PromiseA.resolve(fn()).then(()=>{ throw err; },...