我遇到過在for循環中有一個異步函數的情況。我已經完成了我的先決條件搜索,現在知道forEach()或map()可能是我需要的解決方案。但是我看到的所有例子都只是console.log()每個異步函數的結果。如何將每個異步函數的結果設置爲一個變量,然後只返回變量?通過循環內的異步函數設置變量
下面是我在做什麼一些瘦身碼:(這是所有的節點,順便說一句)
var clients={
"102323":{stuff about this client},
"242341":{stuff about that client}
};
var messages={};
for (var id_client in clients) {
mysql.query("SELECT * FROM messages WHERE id_client='"+id_client+"' ORDER BY date", function(err, rows) {
if (typeof rows !== 'undefined') messages[id_client]=rows;
});
}
//do other stuff with messages variable
有了這個,messages
預見的是空。我明白。
但即使是在這個過渡使用地圖(),而不是爲(),像這樣...
...消息最終被空。
最後,我想知道如何將mysql.query()封裝到另一個帶有回調函數的函數中,以及解決整個異步事件的所有問題。我只是不知道如何在循環內部迭代時如何工作。
。在你的地圖調用VS您的for循環沒什麼區別 - 僅供參考。 – tymeJV
@tymeJV - 有區別...''id_client'對於.map ...在for循環中的每次迭代都是「正確的」,它將是每次最後的客戶端 –
相似性是當'messages'將會被填充 - 也就是在下一行代碼之後(沒有在代碼片段中顯示) –