簡體   English   中英

Node.js代碼執行順序

[英]Node.js code execution order

今天在Node編程的第一天。 我整天相處得很好,但有些奇怪的事情。 我可能不了解Node的異步性。

我有一個執行shell命令的函數:

function puts( error, stdout, stderr ) { sys.puts( stdout ); }

然后我執行一些命令:

exec( "foo", puts );
myarr.keys( "mykey", function ( err, replies ) {
   replies.forEach( function ( reply, i ) {
      exec( "bar" );
   });
});
exec( "fuzz", puts );
exec( "buzz", puts );

因此,應該執行的最后兩件事是fuzz ,然后是buzz 但是, fuzzbuzz似乎發生在循環中的某個隨機點,而bar是最后(有時)打印的東西。 myarr是我通過連接到Redis數據庫構建的數組。

我是否必須強制Node同步執行循環? 我在代碼中使用Redis客戶..這些會引起問題嗎? 有任何想法嗎? 非常感謝 :)。

myarr.keys()進行回調,直到redis查詢完成后才會執行。

如果在此之后和循環之后需要執行“ fuzz”和“ buzz”,則將它們移動到回調函數中,如下所示:

exec( "foo", puts );
myarr.keys( "mykey", function ( err, replies ) {
   replies.forEach( function ( reply, i ) {
      exec( "bar" );
   });
   exec( "fuzz", puts );
   exec( "buzz", puts );
});

重要的是要注意myarr.keys()立即返回(好吧,它已將查詢發送到redis之后)。 這使您可以繼續處理其他內容,而不會阻止該過程。 回調函數是您如何指定代碼來處理來自redis的回復的方式,將來可能會出現此情況。

使用exec會使這些操作異步運行。 您可能需要查看fs包中的同步等效項。 或者,您可能想研究一種將命令堆疊起來的方法,然后再批量執行所有命令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM