Open Genluo opened 5 years ago
使用Promsie.race
来处理竞态
function request(url, options = {}, callback) {
const fetchPromise = fetch(url, options)
.then(response => response.json());
let abort;
const abortPromise = new Promise((resolve, reject) => {
abort = () => {
reject(Error('abort'));
};
});
Promise.race([fetchPromise, abortPromise])
.then(({ data }) => {
callback(data);
}).catch(() => { });
return abort;
}
useEffect(() => {
const abort = request('https://cnodejs.org/api/v1/topic/5433d5e4e737cbe96dcef312', {}, setData);
return () => {
abort();
};
});
Pomise在涉及模式中称之为揭示构造函数,因为生成的一个Promise的状态只会由内部函数决定,这里我们就不详细说规范了,这次就实现一个Promise类来学习:
别人的实现方式
测试
如何判断我们实现的Promise符合规范,可以使用脚本来验证,使用方式如下:
问题
reject
和resolve
的实现是异步的,在node
和brower
上用哪个实现比较好,改写下实现的代码?好文章及其对应的源码