NodeJs非同期プログラミングの意味を深く理解する

藏色散人
リリース: 2022-08-08 14:38:14
転載
1715 人が閲覧しました

#まずは非同期プログラミングとは何かを理解する

意味:

  • #非同期がある場合は確実に同期が行われます

  • 存在するコールバック関数はすべて非同期コードです

  • 同期コードを実行しますcode first 、非同期コードを確認した後、非同期コードを非同期コード実行領域に配置します (最初に実行されません)

  • 同期コードの実行を続行します。すべての同期コードが実行されたら、 、非同期コードを実行します コード

非同期コード例:

console.log('1'); setTimeout(()=>{ console.log('2秒后再执行...'); },2000); console.log('end');
ログイン後にコピー
プログラム実行後の出力結果:

1
Ende
2 数秒後に再度実行します...

概要: コードは実行中に順次実行されますが、コールバック関数が実行されると、コールバック関数は非同期に置かれます。コード実行領域にあるため、最初に実行されることはありません。コードが実行された場合は、その後、1 つずつ実行し、非同期コード実行領域に入れます。

同期されたコードラインの場合:

for(let i=0;i<10;i++){ console.log(i); } console.log('end');
ログイン後にコピー

プログラム実行後の出力結果:

0123456789
end

概要 : 同期コードでは、for ループの実行時間がどれだけ長くても、次のコードは完了するまで待ってから実行されます。

2. 非同期プログラミングはなぜ存在するのでしょうか?

nodejs は、シングルスレッド、非同期、ノンブロッキングを特徴としています。コード ロジックに複数のコールバックが含まれる場合、非常にひどいコードが作成されます。いいえ 後のメンテナンスに役立ちます。

非同期プログラミングの役割は、効率を向上させることです。現在、プログラムはますます大きくなり、CPU とメモリへの負荷も増大しています。非同期により、コンピューターは複数のトランザクションを同時に処理できます。したがって、非同期プログラミングが必要になります。

3. 非同期プログラミングで発生する問題への対処方法

今回のプロジェクトでは、値が取得できない場合、値が未定義であるなどの問題が発生します。非同期プログラミング。

解決策: コールバック関数のネスト、Promise、await、および非同期構文シュガーが同期になる

現在、フォルダー内に 3 つの txt ファイル 1、2、および 3 があり、これら 3 つのファイルを読み取る必要があります。最初のパスが直接読み取られる場合、2 番目のパスでは順序が狂う可能性があるため、非同期の問題に対処し、順番に実行されるようにする必要があります。

コールバック関数を使用してコードをネストします。

const fs=require('fs') const path =require('path') let p1=path.join('1.txt') let p2=path.join('2.txt') let p3=path.join('3.txt') fs.readFile(p1,'utf8',(err,data)=>{ if(err) throw err console.log(data) fs.readFile(p2,'utf8',(err,data)=>{ if(err) throw err console.log(data) fs.readFile(p3,'utf8',(err,data)=>{ if(err) throw err console.log(data) }) }) })
ログイン後にコピー
Promise コードを使用する:

// new promise 的作用:让异步代码马上执行 const fs=require('fs') function readFile(path){ return new Promise((resolve,reject)=>{ fs.readFile(path,'utf8',(err,data)=>{ resolve(data) }) }) } let p1=readFile('1.txt') let p2=readFile('2.txt') let p3=readFile('3.txt') p1.then(result=>{ console.log(result) return p2 }).then(result=>{ console.log(result) return p3 }).then(result=>{ console.log(result) return p3 })
ログイン後にコピー
await および async 構文のシュガー コードを使用することもできます:

const path=require('path') const fs=require('fs') let p1=readFile('1.txt') let p2=readFile('2.txt') let p3=readFile('3.txt') var readfile=(path)=>{ return new Promise((resolve,reject)=>{ fs.readFile(path,'utf8',(err,data)=>{ resolve(data) }) }) } async function exec() { await readfile(p1).then(result => console.log(result)) await readfile(p2).then(result => console.log(result)) await readfile(p3).then(result => console.log(result)) } exec()
ログイン後にコピー
[推奨:

node.js ビデオ チュートリアル]

以上がNodeJs非同期プログラミングの意味を深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!