[JavaScript] 비동기적인 쓰기 async/await 편
17694 단어 JavaScript초학자
이번에는 ES2017에서 가져온 async/await를 써서 Promise를 더욱 간결하게 쓸 수 있도록 하겠습니다.
async가 뭐예요?
함수 정의는 비동기 함수를 정의하는 데 사용됩니다.
async function에서 비동기 함수를 정의할 수 있습니다.
async function이 Promise 인스턴스를 반환합니다.async function sample(){
return 'Hello World!!';
}
상기 예에서 정의한 Sample은 Promise로 쓰면 다음과 같다.
function sample() {
return new Promise((resolve, reject) => {
resolve('Hello World!!');
});
}
async의 이용 예
async function에서 정의한 함수에서 되돌아오면 되돌아오는 값으로 Promise를 진행합니다.resolve나reject를 실행하기 때문입니다.then야.catch ()에서 리턴의 값을 받을 수 있습니다.
async function resolveSample() {
return "sample was resolved!";
}
async function rejectSample() {
// reject を呼ぶ
return Promise.reject(new Error("エラーです..."));
}
async function throwSample() {
throw new Error("エラーが発生");
}
resolveSample().then((value) => {
console.log(value);
});
// 実行結果 =>sample was resolved!
rejectSample().catch((error) => {
console.log(error.message);
});
// 実行結果 => エラーです...
// catch() で例外処理を行える
throwSample().catch((error) => {
console.log(error.message);
}); // => エラーが発生
await란?
async function 내에서 Promise 결과(resolve, reject)가 반환될 때까지 처리를 일시 중지하는 연산자를 나타냅니다.await는 async function에 사용할 수 있습니다.
async/await로 비동기 처리 쓰기
async/await 실제 쓰기 [JavaScript] 비동기적인 쓰기 Promise 편 에서 쓴 다음 처리를 사용합니다.
다음은 async/await를 사용하지 않고 쓴 지난번↑의 처리입니다.///(async/awaitを使わない処理)
const getRelated = publisher =>{
return new Promise((resolve, reject) =>{
setTimeout(pub =>{
const recipe = { title: 'Ramen', publisher: 'Tony' }
resolve(`${pub}: ${recipe.title}`);
}, 2000, publisher);
});
};
const getIDs = new Promise((resolve, reject) =>{
setTimeout(() =>{
resolve([523, 883, 473, 974]);
}, 1500);
});
const getRecipe = recId =>{
return new Promise((resolve, reject) =>{
setTimeout(ID =>{
const recipe = { title: 'Udon', publisher: 'Taro' };
resolve(`${ID}: ${recipe.title}`)
}, 2000, recId);
});
};
getIDs
.then(IDs => {
console.log(IDs);
return getRecipe(IDs[2]);
})
.then(recipe => {
console.log(recipe);
return getRelated('Tony');
})
.then(recipe => {
console.log(recipe);
})
다음은 async/await로 쓴 처리입니다.///(async/awaitを使った処理)
const getRelated = (publisher) => {
return new Promise((resolve, reject) => {
setTimeout(
(pub) => {
const recipe = { title: "Ramen", publisher: "Tony" };
resolve(`${pub}: ${recipe.title}`);
},
2000,
publisher
);
});
};
const getIDs = new Promise((resolve, reject) => {
setTimeout(() => {
resolve([523, 883, 473, 974]);
}, 1500);
});
const getRecipe = (recID) => {
return new Promise((resolve, reject) => {
setTimeout(
(IDs) => {
const recipe = { title: "Udon", publisher: "Taro" };
resolve(`${IDs}: ${recipe.title}`);
},
2000,
recID
);
});
};
async function getRecipesAW() {
const IDs = await getIDs;
console.log(IDs);
const recipe = await getRecipe(IDs[2]);
console.log(recipe);
const related = await getRelated("Tony");
console.log(related);
return recipe;
}
getRecipesAW();
async/await를 사용하면 코드를 간결하게 쓸 수 있습니다.
참고 자료
MDN 웹docs 비동기 함수
Reference
이 문제에 관하여([JavaScript] 비동기적인 쓰기 async/await 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t_t238/items/6faa70f422dd4d9f25b3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
async function sample(){
return 'Hello World!!';
}
function sample() {
return new Promise((resolve, reject) => {
resolve('Hello World!!');
});
}
async function에서 정의한 함수에서 되돌아오면 되돌아오는 값으로 Promise를 진행합니다.resolve나reject를 실행하기 때문입니다.then야.catch ()에서 리턴의 값을 받을 수 있습니다.
async function resolveSample() {
return "sample was resolved!";
}
async function rejectSample() {
// reject を呼ぶ
return Promise.reject(new Error("エラーです..."));
}
async function throwSample() {
throw new Error("エラーが発生");
}
resolveSample().then((value) => {
console.log(value);
});
// 実行結果 =>sample was resolved!
rejectSample().catch((error) => {
console.log(error.message);
});
// 実行結果 => エラーです...
// catch() で例外処理を行える
throwSample().catch((error) => {
console.log(error.message);
}); // => エラーが発生
await란?
async function 내에서 Promise 결과(resolve, reject)가 반환될 때까지 처리를 일시 중지하는 연산자를 나타냅니다.await는 async function에 사용할 수 있습니다.
async/await로 비동기 처리 쓰기
async/await 실제 쓰기 [JavaScript] 비동기적인 쓰기 Promise 편 에서 쓴 다음 처리를 사용합니다.
다음은 async/await를 사용하지 않고 쓴 지난번↑의 처리입니다.///(async/awaitを使わない処理)
const getRelated = publisher =>{
return new Promise((resolve, reject) =>{
setTimeout(pub =>{
const recipe = { title: 'Ramen', publisher: 'Tony' }
resolve(`${pub}: ${recipe.title}`);
}, 2000, publisher);
});
};
const getIDs = new Promise((resolve, reject) =>{
setTimeout(() =>{
resolve([523, 883, 473, 974]);
}, 1500);
});
const getRecipe = recId =>{
return new Promise((resolve, reject) =>{
setTimeout(ID =>{
const recipe = { title: 'Udon', publisher: 'Taro' };
resolve(`${ID}: ${recipe.title}`)
}, 2000, recId);
});
};
getIDs
.then(IDs => {
console.log(IDs);
return getRecipe(IDs[2]);
})
.then(recipe => {
console.log(recipe);
return getRelated('Tony');
})
.then(recipe => {
console.log(recipe);
})
다음은 async/await로 쓴 처리입니다.///(async/awaitを使った処理)
const getRelated = (publisher) => {
return new Promise((resolve, reject) => {
setTimeout(
(pub) => {
const recipe = { title: "Ramen", publisher: "Tony" };
resolve(`${pub}: ${recipe.title}`);
},
2000,
publisher
);
});
};
const getIDs = new Promise((resolve, reject) => {
setTimeout(() => {
resolve([523, 883, 473, 974]);
}, 1500);
});
const getRecipe = (recID) => {
return new Promise((resolve, reject) => {
setTimeout(
(IDs) => {
const recipe = { title: "Udon", publisher: "Taro" };
resolve(`${IDs}: ${recipe.title}`);
},
2000,
recID
);
});
};
async function getRecipesAW() {
const IDs = await getIDs;
console.log(IDs);
const recipe = await getRecipe(IDs[2]);
console.log(recipe);
const related = await getRelated("Tony");
console.log(related);
return recipe;
}
getRecipesAW();
async/await를 사용하면 코드를 간결하게 쓸 수 있습니다.
참고 자료
MDN 웹docs 비동기 함수
Reference
이 문제에 관하여([JavaScript] 비동기적인 쓰기 async/await 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t_t238/items/6faa70f422dd4d9f25b3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
async/await 실제 쓰기 [JavaScript] 비동기적인 쓰기 Promise 편 에서 쓴 다음 처리를 사용합니다.
다음은 async/await를 사용하지 않고 쓴 지난번↑의 처리입니다.
///(async/awaitを使わない処理)
const getRelated = publisher =>{
return new Promise((resolve, reject) =>{
setTimeout(pub =>{
const recipe = { title: 'Ramen', publisher: 'Tony' }
resolve(`${pub}: ${recipe.title}`);
}, 2000, publisher);
});
};
const getIDs = new Promise((resolve, reject) =>{
setTimeout(() =>{
resolve([523, 883, 473, 974]);
}, 1500);
});
const getRecipe = recId =>{
return new Promise((resolve, reject) =>{
setTimeout(ID =>{
const recipe = { title: 'Udon', publisher: 'Taro' };
resolve(`${ID}: ${recipe.title}`)
}, 2000, recId);
});
};
getIDs
.then(IDs => {
console.log(IDs);
return getRecipe(IDs[2]);
})
.then(recipe => {
console.log(recipe);
return getRelated('Tony');
})
.then(recipe => {
console.log(recipe);
})
다음은 async/await로 쓴 처리입니다.///(async/awaitを使った処理)
const getRelated = (publisher) => {
return new Promise((resolve, reject) => {
setTimeout(
(pub) => {
const recipe = { title: "Ramen", publisher: "Tony" };
resolve(`${pub}: ${recipe.title}`);
},
2000,
publisher
);
});
};
const getIDs = new Promise((resolve, reject) => {
setTimeout(() => {
resolve([523, 883, 473, 974]);
}, 1500);
});
const getRecipe = (recID) => {
return new Promise((resolve, reject) => {
setTimeout(
(IDs) => {
const recipe = { title: "Udon", publisher: "Taro" };
resolve(`${IDs}: ${recipe.title}`);
},
2000,
recID
);
});
};
async function getRecipesAW() {
const IDs = await getIDs;
console.log(IDs);
const recipe = await getRecipe(IDs[2]);
console.log(recipe);
const related = await getRelated("Tony");
console.log(related);
return recipe;
}
getRecipesAW();
async/await를 사용하면 코드를 간결하게 쓸 수 있습니다.참고 자료
MDN 웹docs 비동기 함수
Reference
이 문제에 관하여([JavaScript] 비동기적인 쓰기 async/await 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t_t238/items/6faa70f422dd4d9f25b3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([JavaScript] 비동기적인 쓰기 async/await 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t_t238/items/6faa70f422dd4d9f25b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)