[英]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
。 但是, fuzz
和buzz
似乎發生在循環中的某個隨機點,而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.