コールバック、Promise


同期と非同期の違い


モチベーション:リクエストを送信して応答を待機し、次のアクションを実行します.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キーワードを使用して、値が生成されるオブジェクトを生成します.

理解する必要があるステータス値


定置=以下のrejectresolveに分けることができる.
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();