ホームページ >ウェブフロントエンド >フロントエンドQ&A >ノードの同期と非同期の違いは何ですか?

ノードの同期と非同期の違いは何ですか?

WBOY
WBOYオリジナル
2022-04-19 17:25:473050ブラウズ

ノードの同期と非同期の違いは次のとおりです: 同期とは、プログラムが上から下へ実行されることを意味します。次のステップは、前のステップが実行された後にのみ実行できます。非同期は、待機する必要がないことを意味します。操作、非同期プログラミングはコールバックに依存して実装できますが、コールバック後のプログラムが非同期であることを意味するわけではありません。

ノードの同期と非同期の違いは何ですか?

このチュートリアルの動作環境: Windows10 システム、nodejs バージョン 12.19.0、Dell G3 コンピューター。

ノードの同期と非同期の違いは何ですか

同期とはプログラムが上から下に実行されることを意味し、非同期とはノードの同期を待つ必要がないことを意味します。以下の操作を実行する前に、上記のコマンドを実行します。非同期プログラミングはコールバックに依存しますが、コールバックを使用したからといってプログラムが非同期になるとは言えません。

同期英語: sync (同期)

非同期英語: async (非同期)

同期 API: 現在の API の実行が完了した後でのみ、実行を続行できます。次の API

console.log('before'); 
console.log('after');

非同期 API: 現在の API の実行は後続のコードの実行をブロックしません

console.log('before');
setTimeout(
   () => { console.log('last');
}, 2000);
console.log('after');

同期 API と非同期 API の違い(戻り値の取得)

同期APIは戻り値からAPIの実行結果を取得できますが、非同期APIは取得できません(非同期APIにreturnを書いても結果は取得できないようです?)

// 异步
  function getMsg () { 
      setTimeout(function () { 
          return { msg: 'Hello Node.js' }
      }, 2000);
  }
  const msg = getMsg (); //函数没有写return 默认是返回 undefined
cnsole.log(msg); // 输出的是 undefined,因为定时器还没执行完就执行了输出

コールバック関数

独自の関数を定義し、他の関数を呼び出せるようにします。

// getData函数定义
 function getData (callback) {}
  // getData函数调用
 getData (() => {});
/*例子------------------*/
function getMsg (callback) {
    setTimeout(function () {
        callback ({ msg: 'Hello Node.js' })
    }, 2000);
}
getMsg (function (msg) { 
    console.log(msg);
});

同期 API と非同期 API の違い (コードの実行順序)

同期 API は上から下へ順番に実行されます。前のコードでは実行がブロックされます。次のコードの

非同期 API は、コードを実行する前に API の実行が完了するのを待ちません。

コード実行シーケンスの分析

JavaScript は同期 API に分割されます。コード実行領域と非同期コード実行領域の間にはコールバック関数のキュー接続があります。まず、JavaScript は同期コード領域のすべての内容を実行し、次に非同期コード領域に移動してコードを実行し、非同期コード領域で実行されたコード ブロックを見つけて、すぐにそのコードに対応するコールバック関数を見つけます。非同期コード ブロックを作成し、同期コード実行領域に配置します。Node.js で非同期 API

#ファイル読み取り API を実行するには、コールバック関数があります。 。

イベント監視 API にはコールバック関数もあります。 (イベント処理関数はコールバック関数、イベントリスニング API は非同期 API)

非同期 API の背後にあるコードの実行は、現在の非同期 API の実行結果に依存しますが、実際には後続のコードが実行されたときに非同期 API が返されません。その結果、この問題を解決するにはどうすればよいでしょうか?

たとえば、ファイル A、ファイル B、ファイル C を順番に読み込むという要件があります (A を読み込んだ後、B を読み、次に C を読みます。同時に読み込むことはできません)

上記の要件が実現されると、B を読み取る操作が A のコールバック関数に配置され、C を読み取る操作が B のコールバック関数に配置されるため、多くの入れ子レベルになります (コールバック地獄)

const fs = require('fs');
fs.readFile('./1.txt', 'utf8', (err, result1) => {
console.log(result1)
fs.readFile('./2.txt', 'utf8', (err, result2) => {
console.log(result2)
fs.readFile('./3.txt', 'utf8', (err, result3) => {
console.log(result3)
})
})
});

推奨学習: " nodejs ビデオ チュートリアル >>

以上がノードの同期と非同期の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。