https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
//-------------------------------------
* await 키워드
- async 속성이 부여된 함수 내부 에서만 사용가능
* async 함수
- await 없이 호출하면 바로 다음 코드가 실행됨(비동기 동작)
- async 함수 내부 코드는 동기로 실행됨
//-------------------------------------
// 비동기 함수 - Promise 사용
function asf1() {
return new Promise(resolve => {
resolve('asf1-end');
});
// 동일 : return Promise.resolve('resolved')
}
// 비동기 함수 - aync 사용
async function asf2() {
return 'asf2-end';
// 동일 : return Promise.resolve('asf2-end').then(() => undefined)
}
//-------------------------------------
// 비동기 함수 호출 - 일반 함수
function asyncCall1() {
console.log('asyncCall1 - start')
let ret;
ret = asf1().then((ret) => { console.log(ret) });
ret = asf2().then((ret) => { console.log(ret) });
//ret = await asf1(); //에러
console.log('asyncCall1 - end')
}
// 비동기 함수 호출 - async 함수
async function asyncCall2() {
console.log('asyncCall2 - start')
let ret;
ret = asf1().then((ret) => { console.log(ret) });
ret = asf2().then((ret) => { console.log(ret) });
ret = await asf1();
console.log(ret)
ret = await asf2();
console.log(ret)
console.log('asyncCall2 - end')
}
//-----------------------------------------------
< 일반 동기 함수를 비동기 함수로 바꾸는 함수 >
// 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 );
'Code > JavaScript' 카테고리의 다른 글
[Javascript] node.js DB 사용법 - MySql, Sequelize (0) | 2020.08.10 |
---|---|
[Javascript] 타이머 함수 실행 순서 (0) | 2020.08.10 |
node.js 실행파일로 만들기 (2) | 2020.08.09 |
[Javascript] Hexo - Node.js. blog framework (0) | 2020.07.29 |
[Javascript] Node.js CMS - Strapi 설치 (0) | 2020.07.29 |