概述
手动实现一个Promise
function MyPromise(main){
let status = "pending"; //Promise对象状态
let tasklist = []; //保存所有的任务
let exceptionHander = null;
function resolve(msg) {
if(status == "pending") {
status = "resovled"; //修改状态为resolved
let next = tasklist.shift(); //从任务队列取出第一个
let newp = next(msg); //执行
if( newp instanceof MyPromise ) { //若有新的Promise出现
//将当前任务队列当中,剩余的任务,交接给下一个Promise
tasklist.forEach( t=>{
newp.then( t )
})
}
}
}
function reject(msg) {
if( status == "pending") { //防止状态二次修改
status = "rejected";
exceptionHander ? exceptionHander(msg): throw new Error(msg); //执行异常处理
}
}
this.then = function( task ){
tasklist.push(task); //将任务存入队列当中
return this;
}
this.catch = function( fn ){
exceptionHander = fn;
}
this.getStatus = function(){
return status;
}
setTimeout(()=>{
main(resolve, reject);
}, 0)
}
Promise.all 实现
MyPromise.all = function(args){
let count = 0;
let task = null;
function resolve() {
count++;
if(count == args.length) task();
}
args.forEach(p=>{
p.then(resolve);
})
return {
then( fn ){
task = fn;
}
}
}
最后
以上就是英勇导师为你收集整理的前端企业面试题:企业真实案例——33的全部内容,希望文章能够帮你解决前端企业面试题:企业真实案例——33所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复