外管局网站 报告怎么做,dedecms 购物网站,蜗牛影院看电影,怒江州建设局网站目录
链式编程 处理异常 和普通内容
链式编程---处理返回promise
链式编程---处理重复引用
链式编程--rejected
链式编程--处理padding状态 链式编程 处理异常 和普通内容
1.返回promise实例#xff1a;在原本then方法里边创建新promise2.获取返回值#xff1a;把原本…目录
链式编程 处理异常 和普通内容
链式编程---处理返回promise
链式编程---处理重复引用
链式编程--rejected
链式编程--处理padding状态 链式编程 处理异常 和普通内容
1.返回promise实例在原本then方法里边创建新promise2.获取返回值把原本的then的逻辑迁移到新promise中 是同步执行的不受影响方便传递给新创建的promise3.处理返回值 调用新promise的 resolve 4.处理异常 try catch 捕获异常 调用新promise的 reject function runAsyncTask(callback) {if (typeof queueMicrotask function) {queueMicrotask(callback);} else if (typeof MutationObserver function) {const obs new MutationObserver(callback);const divNode document.createElement(div);obs.observe(divNode, { childList: true });divNode.innerHTML 贾公子;} else {setTimeout(callback, 0);}
}/**链式编程 处理异常 和普通内容* 1.返回promise实例* 2.获取返回值* 2.1处理返回值* 2.2处理异常***/
const PENDING pending;
const FULFILLED fulfilled;
const REJECTED rejected;class MyPromise {state PENDING;result undefined;#handlers [];constructor(func) {const resolve (result) {if (this.state PENDING) {this.state FULFILLED;this.result result;this.#handlers.forEach(({ onFulfilled }) {onFulfilled(this.result);});}};const reject (result) {if (this.state PENDING) {this.state REJECTED;this.result result;this.#handlers.forEach(({ onRejected }) {onRejected(this.result);});}};func(resolve, reject);}then(onFulfilled, onRejected) {onFulfilled typeof onFulfilled function ? onFulfilled : (x) x;onRejected typeof onRejected function? onRejected: (x) {throw x;};// 1.返回promise实例const p2 new MyPromise((resolve, reject) {if (this.state FULFILLED) {runAsyncTask(() {try {// 2.获取返回值const x onFulfilled(this.result);// 2.1处理返回值resolve(x);// 2.2处理异常} catch (error) {reject(error);}});} else if (this.state REJECTED) {runAsyncTask(() {onRejected(this.result);});} else if (this.state PENDING) {this.#handlers.push({onFulfilled: () {runAsyncTask(() {onFulfilled(this.result);});},onRejected: () {runAsyncTask(() {onRejected(this.result);});},});}});return p2;}
}// 测试代码const p new MyPromise((resolve, reject) {resolve(1);// reject(error);
});
p.then((result) {console.log(p1, result);throw new Error(异常);// return 2;
}).then((result) {console.log(p2, result);},(err) {console.log(p2, err);}
);链式编程---处理返回promise 1.使用 instanceof判断返回值是否为 MyPromise实例
2.如果是代表传递的返回值是promise 调用传递的promise的then方法
3.在成功回调中调用resolve失败回调中传递reject把结果传递
function runAsyncTask(callback) {if (typeof queueMicrotask function) {queueMicrotask(callback);} else if (typeof MutationObserver function) {const obs new MutationObserver(callback);const divNode document.createElement(div);obs.observe(divNode, { childList: true });divNode.innerHTML 贾公子;} else {setTimeout(callback, 0);}
}/****/
const PENDING pending;
const FULFILLED fulfilled;
const REJECTED rejected;class MyPromise {state PENDING;result undefined;#handlers [];constructor(func) {const resolve (result) {if (this.state PENDING) {this.state FULFILLED;this.result result;this.#handlers.forEach(({ onFulfilled }) {onFulfilled(this.result);});}};const reject (result) {if (this.state PENDING) {this.state REJECTED;this.result result;this.#handlers.forEach(({ onRejected }) {onRejected(this.result);});}};func(resolve, reject);}then(onFulfilled, onRejected) {onFulfilled typeof onFulfilled function ? onFulfilled : (x) x;onRejected typeof onRejected function? onRejected: (x) {throw x;};const p2 new MyPromise((resolve, reject) {if (this.state FULFILLED) {runAsyncTask(() {try {const x onFulfilled(this.result);// 1.处理返回promiseif (x instanceof MyPromise) {// 2.调用then方法x.then((res) {resolve(res);},(err) {reject(err);});} else {resolve(x);}} catch (error) {reject(error);}});} else if (this.state REJECTED) {runAsyncTask(() {onRejected(this.result);});} else if (this.state PENDING) {this.#handlers.push({onFulfilled: () {runAsyncTask(() {onFulfilled(this.result);});},onRejected: () {runAsyncTask(() {onRejected(this.result);});},});}});return p2;}
}// 测试代码const p new MyPromise((resolve, reject) {resolve(1);
});
p.then((result) {return new MyPromise((resolve, reject) {resolve(2);// reject(err);});
}).then((result) {console.log(p2, result);},(err) {console.log(p2, err);}
);链式编程---处理重复引用 在then的回调函数中直接把then的结果返回了会抛出重复引用的问题 1.x就是then回调函数的返回值then方法返回的promise就是p2
2.比较x跟p2是否全等 是就抛出异常
function runAsyncTask(callback) {if (typeof queueMicrotask function) {queueMicrotask(callback);} else if (typeof MutationObserver function) {const obs new MutationObserver(callback);const divNode document.createElement(div);obs.observe(divNode, { childList: true });divNode.innerHTML 贾公子;} else {setTimeout(callback, 0);}
}const PENDING pending;
const FULFILLED fulfilled;
const REJECTED rejected;class MyPromise {state PENDING;result undefined;#handlers [];constructor(func) {const resolve (result) {if (this.state PENDING) {this.state FULFILLED;this.result result;this.#handlers.forEach(({ onFulfilled }) {onFulfilled(this.result);});}};const reject (result) {if (this.state PENDING) {this.state REJECTED;this.result result;this.#handlers.forEach(({ onRejected }) {onRejected(this.result);});}};func(resolve, reject);}then(onFulfilled, onRejected) {onFulfilled typeof onFulfilled function ? onFulfilled : (x) x;onRejected typeof onRejected function? onRejected: (x) {throw x;};const p2 new MyPromise((resolve, reject) {if (this.state FULFILLED) {runAsyncTask(() {try {const x onFulfilled(this.result);// 1.处理重复的引用if (x p2) {console.log(----);throw new TypeError(Chaining cycle detected for promise #Promise);}if (x instanceof MyPromise) {x.then((res) {resolve(res);},(err) {reject(err);});} else {resolve(x);}} catch (error) {reject(error);}});} else if (this.state REJECTED) {runAsyncTask(() {onRejected(this.result);});} else if (this.state PENDING) {this.#handlers.push({onFulfilled: () {runAsyncTask(() {onFulfilled(this.result);});},onRejected: () {runAsyncTask(() {onRejected(this.result);});},});}});return p2;}
}// 测试代码const p new MyPromise((resolve, reject) {resolve(1);
});
const p2 p.then((res) {return p2;
});
p2.then((res) {},(err) {console.log(err);}
);链式编程--rejected
完成链式第一步要返回promise 处理Fulfilled时候已完成
通过trycatch 处理异常
抽离函数 resolvePromise 处理 重复引用 以及返回promise的情况
调用函数测试状态 function runAsyncTask(callback) {if (typeof queueMicrotask function) {queueMicrotask(callback);} else if (typeof MutationObserver function) {const obs new MutationObserver(callback);const divNode document.createElement(div);obs.observe(divNode, { childList: true });divNode.innerHTML 贾公子;} else {setTimeout(callback, 0);}
}const PENDING pending;
const FULFILLED fulfilled;
const REJECTED rejected;class MyPromise {state PENDING;result undefined;#handlers [];constructor(func) {const resolve (result) {if (this.state PENDING) {this.state FULFILLED;this.result result;this.#handlers.forEach(({ onFulfilled }) {onFulfilled(this.result);});}};const reject (result) {if (this.state PENDING) {this.state REJECTED;this.result result;this.#handlers.forEach(({ onRejected }) {onRejected(this.result);});}};func(resolve, reject);}/***处理异常*/then(onFulfilled, onRejected) {onFulfilled typeof onFulfilled function ? onFulfilled : (x) x;onRejected typeof onRejected function? onRejected: (x) {throw x;};const p2 new MyPromise((resolve, reject) {if (this.state FULFILLED) {runAsyncTask(() {try {const x onFulfilled(this.result);resolvePromise(p2, x, resolve, reject);} catch (error) {reject(error);}});} else if (this.state REJECTED) {// 1.处理异常runAsyncTask(() {try {// 2.获取返回值const x onRejected(this.result);// 4.调用函数resolvePromise(p2, x, resolve, reject);} catch (error) {reject(error);}});} else if (this.state PENDING) {this.#handlers.push({onFulfilled: () {runAsyncTask(() {onFulfilled(this.result);});},onRejected: () {runAsyncTask(() {onRejected(this.result);});},});}});return p2;}
}
// 3.抽取函数
function resolvePromise(p2, x, resolve, reject) {if (x p2) {throw new TypeError(Chaining cycle detected for promise #Promise);}if (x instanceof MyPromise) {x.then((res) {resolve(res);},(err) {reject(err);});} else {resolve(x);}
}// 测试代码const p new MyPromise((resolve, reject) {reject(1);
});
const p2 p.then(undefined, (err) {// throw error;// return p2;// return 2;return new MyPromise((resolve, reject) {resolve(OK);reject(ERROR);});
});
p2.then((res) {console.log(p2--res, res);},(err) {console.log(p2--err, err);}
);链式编程--处理padding状态 PENDING状态要根据异步执行的结果存储到handlers数组中不同的函数onFulfilled || onRejected两个处理链式编程的逻辑完全一样 * 处理异常 trycatch捕获异常 * 获取返回值 获取第一个promise的返回值 * 调用函数 处理 重复引用以及 返回promise的情况 function runAsyncTask(callback) {if (typeof queueMicrotask function) {queueMicrotask(callback);} else if (typeof MutationObserver function) {const obs new MutationObserver(callback);const divNode document.createElement(div);obs.observe(divNode, { childList: true });divNode.innerHTML 贾公子;} else {setTimeout(callback, 0);}
}function resolvePromise(p2, x, resolve, reject) {if (x p2) {throw new TypeError(Chaining cycle detected for promise #Promise);}if (x instanceof MyPromise) {x.then((res) {resolve(res);},(err) {reject(err);});} else {resolve(x);}
}
const PENDING pending;
const FULFILLED fulfilled;
const REJECTED rejected;class MyPromise {state PENDING;result undefined;#handlers [];constructor(func) {const resolve (result) {if (this.state PENDING) {this.state FULFILLED;this.result result;this.#handlers.forEach(({ onFulfilled }) {onFulfilled(this.result);});}};const reject (result) {if (this.state PENDING) {this.state REJECTED;this.result result;this.#handlers.forEach(({ onRejected }) {onRejected(this.result);});}};func(resolve, reject);}/*** 处理异常* 获取返回值* 调用函数*/then(onFulfilled, onRejected) {onFulfilled typeof onFulfilled function ? onFulfilled : (x) x;onRejected typeof onRejected function? onRejected: (x) {throw x;};const p2 new MyPromise((resolve, reject) {if (this.state FULFILLED) {runAsyncTask(() {try {const x onFulfilled(this.result);resolvePromise(p2, x, resolve, reject);} catch (error) {reject(error);}});} else if (this.state REJECTED) {runAsyncTask(() {try {const x onRejected(this.result);resolvePromise(p2, x, resolve, reject);} catch (error) {reject(error);}});} else if (this.state PENDING) {this.#handlers.push({onFulfilled: () {runAsyncTask(() {// 处理异常try {// 获取返回值const x onFulfilled(this.result);// 调用函数resolvePromise(p2, x, resolve, reject);} catch (error) {reject(error);}});},onRejected: () {runAsyncTask(() {// 处理异常try {// 获取返回值const x onRejected(this.result);// 调用函数resolvePromise(p2, x, resolve, reject);} catch (error) {reject(error);}});},});}});return p2;}
}// 测试代码const p new MyPromise((resolve, reject) {setTimeout(() {resolve(1);}, 2000);
});
const p2 p.then((res) {// throw error;// return p2;// return 2;return new MyPromise((resolve, reject) {setTimeout(() {resolve(OK);}, 2000);// reject(ERROR);});
});
p2.then((res) {console.log(p2--res, res);},(err) {console.log(p2--err, err);}
);