ホームページ  >  記事  >  ウェブフロントエンド  >  NodeJs非同期プログラミングの意味を深く理解する

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

藏色散人
藏色散人転載
2022-08-08 14:38:141753ブラウズ

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

意味:

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

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

  • 同期コードを実行します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(&#39;end&#39;);

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

0123456789
end

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

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

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

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

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

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

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

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

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

const fs=require(&#39;fs&#39;)
const path =require(&#39;path&#39;)
let p1=path.join(&#39;1.txt&#39;)
let p2=path.join(&#39;2.txt&#39;)
let p3=path.join(&#39;3.txt&#39;)
fs.readFile(p1,&#39;utf8&#39;,(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 までご連絡ください。