(JS)BelloperのモダンJavaScript:非同期処理



出版する
タスクを同期処理すると、タスクの完了を待つ間に停止状態になるため、他のタスクは実行できません.仕事が終わってからでないと次の予定の仕事ができないからです.
ただし、非同期処理を行うとストリームは停止しないため、複数のタスクを同時に処理できます.

大量の計算タスクを処理する関数の作成

function work() {
  const start = Date.now();
  for (let i = 0; i < 1000000000; i++) {}
  const end = Date.now();
  console.log(end - start + 'ms');
}

work();
console.log('다음 작업');
work()関数が露出すると、for文が返されると、他の操作を処理せずにfor文が完全に実行されます.
このプロセスで他の操作を行う場合は、関数を非同期形式に変換する必要があります.そのためには、setTimeOutという関数を使用する必要があります.
function work() {
  setTimeout(() => {
    const start = Date.now();
    for (let i = 0; i < 10000000; i++) {}
    const end = Date.now();
    console.log(end - start + 'ms');
  }, 0);
}

console.log('작업시작');
work();
console.log('다음 작업');
setTimeout関数は、第1のパラメータの関数を第2のパラメータに入れる時間(ms単位)後に呼び出される.(これは、0ミリ秒後に実行されることを意味しますが、実際には4ミリ秒後に実行されます.)setTimeoutを使用すると、指定したタスクはバックグラウンドで実行されるため、既存のコードストリームをブロックせずに他のタスクを同時に実行できます.

ワーク関数が終わったら、どんなタスクを処理したいですか?

パラメータとしてコールバック関数を渡す


コールバック関数とは、関数タイプの値をパラメータに渡し、特定の操作が完了した後にパラメータとして受信した関数を呼び出すことです.
function work(callback) {
  setTimeout(() => {
    const start = Date.now();
    for (let i = 0; i < 10000000; i++) {}
    const end = Date.now();
    console.log(end - start + 'ms');
    callback();
  }, 0);
}

console.log('작업 시작');
work(() => {
  console.log('작업이 끝났어요!')
});
console.log('다음 작업');

プライマリ非同期処理

  • AjaxWeb APIリクエスト:サーバ側からデータを受信する必要がある場合は、サーバ応答をリクエストして待機する必要があるため、タスクは非同期で処理されます.
  • ファイルの読み取り:通常、サーバ側でファイルの読み取りが必要な場合に非同期処理を行います.
  • 暗号化/復号化:暗号化/復号化時でも直ちに処理できない場合があり、一定の時間がかかる場合があるため非同期処理である.
  • 計画
  • タスク:数秒後にタスクをスケジュールする必要がある場合は、settimeoutを使用して非同期処理を行うことができます.