指定されたディレクトリにファイルを出力するために使用される次のコードを調べてください。 リーリー
上記のコードで出力された結果が理解できません。このプログラム設計のロジックによれば、ディレクトリ内のすべてのファイルが最初にリストされ、次にカウンターi==files.length## がリストされるはずです。 # 「出力完了
」が最後の単語になる前に出力する必要があります。
#上の図のように、終端文字「出力完了
非同期呼び出しに時間差があるのではないかと思ったので、上記のコードの sleep(1000) コメント部分を削除しましたが、結果は依然として予想と一致していませんでした。 「ファイルは次のとおりです」 「follows」プロンプトが最初に出力され、1 秒後に停止しました。後続のステートメントは休止せずにほぼ同時に発行され、最後に「出力完了」という単語が最初に出力されます。
要約すると、私が知りたいのは
印刷結果が不安定で、最初に「出力完了」のメッセージが出力されるのはなぜですか?
pause ステートメント
sleep(1000)
この問題を解決するにはどうすればよいでしょうか。つまり、プロンプト「出力完了」をできるだけ少ない変更で最終的に出力できるようにするにはどうすればよいでしょうか?
アドバイスありがとうございます!
大家讲道理2017-05-31 10:42:11
fs.stat
は非同期操作であるため、出力ファイル情報は非同期で実行され、最初に「出力完了」を出力する必要があります。同期したい場合は、これを使用できます https://nodejs.org/docs/lates...
console.log('sleep') を sleep に追加して、出力が 1 回だけかどうかを確認しますか?
ファイル情報を出力した後にのみ「出力完了」が出力されるようにしたい場合は、最初に述べたように fs.statSync を使用する方が修正が少なくて済みます
PHP中文网2017-05-31 10:42:11
@Dontの答えによると、fs.statのコールバック関数は通常、メインプログラムの実行と時間の間のギャップ中に呼び出されるため、これが非同期メソッド呼び出しの理由です。呼ばれる順番も不明。同期は statSync メソッドを使用して実現できます:
リーリー