javascript - Node.js の出力順序が予想と異なるのはなぜですか?
大家讲道理
大家讲道理 2017-05-31 10:40:11
0
2
632

指定されたディレクトリにファイルを出力するために使用される次のコードを調べてください。 リーリー

上記のコードで出力された結果が理解できません。このプログラム設計のロジックによれば、ディレクトリ内のすべてのファイルが最初にリストされ、次にカウンター

i==files.length## がリストされるはずです。 # 「出力完了」が最後の単語になる前に出力する必要があります。


#上の図のように、終端文字「出力完了

」が最初に出力されるだけでなく、印刷順序がめちゃくちゃになっており、複数回の印刷順序も不安定です。

非同期呼び出しに時間差があるのではないかと思ったので、上記のコードの sleep(1000) コメント部分を削除しましたが、結果は依然として予想と一致していませんでした。 「ファイルは次のとおりです」 「follows」プロンプトが最初に出力され、1 秒後に停止しました。後続のステートメントは休止せずにほぼ同時に発行され、最後に「出力完了」という単語が最初に出力されます。

要約すると、私が知りたいのは

印刷結果が不安定で、最初に「出力完了」のメッセージが出力されるのはなぜですか?

  1. pause ステートメント

    sleep(1000)
  2. を追加した後、最初に 1 秒間だけ一時停止し、その後は一時停止せずに同時に出力するのはなぜですか?
  3. この問題を解決するにはどうすればよいでしょうか。つまり、プロンプト「出力完了」をできるだけ少ない変更で最終的に出力できるようにするにはどうすればよいでしょうか?

  4. アドバイスありがとうございます!

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
大家讲道理
  1. fs.stat は非同期操作であるため、出力ファイル情報は非同期で実行され、最初に「出力完了」を出力する必要があります。同期したい場合は、これを使用できます https://nodejs.org/docs/lates...

  2. console.log('sleep') を sleep に追加して、出力が 1 回だけかどうかを確認しますか?

  3. ファイル情報を出力した後にのみ「出力完了」が出力されるようにしたい場合は、最初に述べたように fs.statSync を使用する方が修正が少なくて済みます

いいねを押す +0
Ty80

@Dontの答えによると、fs.statのコールバック関数は通常、メインプログラムの実行と時間の間のギャップ中に呼び出されるため、これが非同期メソッド呼び出しの理由です。呼ばれる順番も不明。同期は statSync メソッドを使用して実現できます:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート