コールバック、Promise
8940 ワード
同期と非同期の違い
モチベーション:リクエストを送信して応答を待機し、次のアクションを実行します.
ex) 한줄로 서서 표사기
≪非同期|Asynchronous|ldap≫:リクエストを送信すると、応答に関係なく次の操作が実行されます.ex) 카페
console.log('1');
setTimeout(function() {
console.log('2')
}, 1000)
console.log('3')
console.log('0')
// 1,3,0,2 순으로 출력되는 것을 볼 수 있다
非同期コントロール(callback、Promise、async)
1. Callback
:コールバック関数を使用して、処理するイベントを順次挿入します.
콜백 지옥(callback hell)
に陥る可能性があることを知っておく必要があります.*コールバック地獄:パラメータに渡されたコールバック関数を繰り返すことで、コードのインデントが非常に深くなり、コードの毒性が低下します(次はコールバック地獄)
短所
上で説明したcallback地獄
エラー処理の困難
そのため、Promiseが登場しました(
ES6 이상
)2. Promise
:
new
キーワードを使用して、値が生成されるオブジェクトを生成します.理解する必要があるステータス値
定置=以下の
reject
とresolve
に分けることができる.resolve=成功した非同期リクエスト(値)を受信して返す
拒否=失敗した非同期リクエストを受信して返す(エラー)
finally=エラーが返されても、エラーが満たされているかどうかにかかわらず、無条件に実行されます.
오늘 node.js 환경에서 활용한 내용 // readme 파일의 내용을 읽으시오
const getDataFromFilePromise = (filePath) => {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', (err, data) => {
if (data) {
resolve(data);
} else {
reject(err);
}
});
});
};
getDataFromFilePromise('README.md').then((data) => console.log(data));
3. async
:コードの実行順序と複雑さに対して改善された最新の構文
直感的にawaitキーワードを使用して実行を遅らせることもできます.
2번의 짜놓은 코드를 활용하여, 다른 파일들의 데이터를 합치는 작업을 해주었다
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
const readAllUsersAsyncAwait = async () => {
let arr = [];
const user1 = await getDataFromFilePromise(user1Path);
const user2 = await getDataFromFilePromise(user2Path);
arr.push(JSON.parse(user1));
arr.push(JSON.parse(user2));
return arr;
};
readAllUsersAsyncAwait();
Reference
この問題について(コールバック、Promise), 我々は、より多くの情報をここで見つけました https://velog.io/@yesparrot/콜백Promiseテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol