私は現在、いくつかのNode.jsコードをテストしようとしています。今、私は自分のコードconsole.log()がコードの実行順序とは異なる順序になっている理由を理解しようとしています。これは、OS関連のNode.js関数呼び出しに関するものです。
私のスクリプトはこれを順番に行います:
//First
fs.readdir(){ //read from a directory all the available files
console.log some stuff #a
}
//Second
fs.readFile(){ //read entire text file
console.log some stuff #b
}
//Third
//create readline interface using fs.createReadStream(filedir) then
interface{ //read from text file line by line
console.log some stuff #c
}
関数aはパスを使用します:__ dirname + '/ text_file /'
関数bおよびcはパスを使用します:__ dirname、 ' / text_file / text1.txt'
出力:
a
c
b
誰かがこの注文が発生する理由を説明できますか?私はオペレーティングシステムやNode.jsのバックグラウンドで何が起こっているのかについての専門家ではありません。私がこれに頼るとしたら、この注文は私のアプリを台無しにしますか?
このような複数の非同期操作を次々に開始すると、完了順序が不確定になります。これらの操作は、Javascriptとは独立して実行されます。これらはいわゆる「ノンブロッキング」であり、関数呼び出しからすぐに戻り、Javascriptが実行を継続することを意味します。しばらくして、彼らは終了し、Javascriptイベントキューにイベントを挿入し、次にあなたが彼らに渡したコールバックが呼び出されます。これらの関数の「非同期、非ブロッキング」の側面は、操作が完了するのを「待機」してから戻ることを意味します。
すべて同時に実行中の複数の非同期操作の完了順序は、どちらが他の操作よりも先に作業を終了するかによって異なります。
それらを順番に実行する場合は、最初の完了コールバックで2番目の操作を開始し、3番目の完了コールバックで3番目の操作を開始して、順番に実行するように特別にコーディングする必要があります。
例えば:
fs.readdir(somePath, function(err, files) {
if (err) {
console.log(err);
} else {
fs.readFile(someFilename, function(err, data) {
if (err) {
console.log(err);
} else {
// done with both asynchronous operations here
console.log(data);
}
});
}
});
このトピックに関するその他の関連資料:
node.jsで非同期readFileメソッドを順序に従わせる方法
非同期呼び出しが含まれる場合、特定の実行順序を設定するにはどうすればよいですか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加