【发布时间】:2019-09-11 15:34:17
【问题描述】:
我正在尝试在我的 Node.js 应用程序上获取虚拟社区列表,然后使用回调函数将其返回。当我用回调调用 getList() 方法时,它返回一个空数组。
const mysqli = require("../mysqli/connect");
class Communities{
getList(callback){
var list = [];
mysqli.query("SELECT * FROM communities", (err, communities) => {
for(let i = 0; i < communities.length; i++){
mysqli.query("SELECT name FROM users WHERE id='"+ communities[i].host +"'", (err, host) => {
list.push({
"id": communities[i].id,
"name": communities[i].name,
"hostID": communities[i].host,
"hostName": host[0].name,
"verified": communities[i].verified,
"people": communities[i].people
});
});
}
callback(list);
});
}
}
new Communities().getList((list) => {
console.log(list);
});
我需要将 for 循环设为异步并在 for 循环结束时调用回调。请让我知道如何做到这一点。谢谢。
【问题讨论】:
-
你用的是哪个mysqli库?
-
这可能与 for 循环是同步的事实有关。因此,回调发生在循环本身之前。当您使用回调时,您可以使用一些异步流程来使用它。 Async 是一个很好的库来处理这个
-
是的,这是它的主要问题,因为回调发生在你写的循环之前,但我不知道如何很好地使用那个库。
标签: javascript node.js for-loop asynchronous callback