JS非同期関数、promise


ひどうきかんすう

  • 関数内部で非同期で動作するコードを含む関数
  • 非同期関数は、内部の非同期コードが終了しなくてもすぐに終了します.
  • 非同期関数は非同期処理結果を外部に戻すことができず、上位機に渡すことができないため、非同期関数内で結果を処理する.この過程で、コールバックスクリューが発生する可能性がある
  • //비동기 함수 setTimeout
    //호출과 동시에 종료되기 때문에 상위 스코프에 기대한 대로 값을 할당하지 못한다
    let number = 1;
    
    setTimeout(() => number = 2, 1000);
    console.log(number);  //1

    Promiseオブジェクトによるコールバックヘルプの解析

  • 非同期処理状態と処理結果の管理対象
  • Promiseジェネレータは、「resolve」、「execute」関数をパラメータとするコールバック関数をパラメータとする.非同期処理に成功した場合は解析関数を呼び出し、失敗した場合は拒否関数を呼び出す.
  • Promiseには3つの状態がある.
  • pending:非同期処理未実行
  • 完了:解析関数が呼び出された状態.非同期処理成功
  • 拒否:拒否関数が呼び出されている.非同期処理失敗
  • //Promise의 후속 처리 메소드 then
    //첫 번째 콜백 함수는 fulfilled상태가 되면 호출되고, 비동기 처리 결과를 인수로 받는다
    //두 번째 콜백 함수는 rejected상태가 되면 호출되고, 프로미스의 에러를 인수로 받는다
    
    //then은 항상 Promise 객체를 반환한다.
    //then의 콜백 함수가 Promise를 반환하면 그 Promise 객체를 반환
    //Promise가 아닌 값을 반환하면 그 값을 value로 한 Promise객체를 반환한다.
    
    let promiseFul = new Promise(resolve => resolve("비동기 처리 성공"))
    .then((res) => console.log(res), (res) => console.error(res));  //비동기 처리 성공
    
    let promiseRej = new Promise((_, reject) => reject(new Error("비동기 처리 실패")))
    .then((res) => console.log(res), (res) => console.error(res));  //Error: 비동기 처리 실패
    ソース
    李雄模、モダンjavascript Deep Dive(2021)