전단 기업 면접 문제: 기업 실제 사례-33

1342 단어
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.실현
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;
		}
	}
}

좋은 웹페이지 즐겨찾기