我是靠谱客的博主 英勇导师,最近开发中收集的这篇文章主要介绍前端企业面试题:企业真实案例——33,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

手动实现一个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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部