- 자바스크립트 asynchronous function 

//-----------------------

< async 키워드 >

  • 리턴값이 Promise이다
    • then() 이나 await 를 통해 리턴값을 받는다
  • async 함수 안에서만 await를 쓸수있다
function f1(){
    await f2(); <=== 에러
}

//----------------------------------

< 비동기 함수 만들기 >

  • async 키워드 나 Promise 만으로 비동기로 동작하지 않는다.

    • async 함수는 비동기 함수를 실행하는 함수 제작용
  • Promise 와 setTimeout 가 꼭 필요

function f() {        
    return new Promise((resolve, reject) => {                
        setTimeout( () => {
            resolve(1);
        });
    });    
}

//-----------------------------------------------

< 일반 동기 함수를 비동기 함수로 바꾸는 함수 >

// sync -> async
Function.prototype.applyAsync = function (..._args) {
    return new Promise((resolve, reject) => {
        try {
            var function_context = this;
            setTimeout(function () {
                var val = function_context.apply(undefined, _args);
                resolve(val);
            }, 0);
        } catch (e) {
            reject('error');
        }
    });
}

function add(a,b){
    return a+b;
}

let ret = await add.applyAsync( 1,2 );
Posted by 코덴스

댓글을 달아 주세요