这是我的第二个Node项目。我正在使用Node,Express,MySQL。
我正在做的是,我有一些已发布内容的用户名称,然后我遍历这些名称,并为每个人做一个connection.query来获取他们的帖子并将它们存储到一个数组中(之后我对它进行了一些其他的数据处理,但那不是重要的部分)
问题是:我的代码在从connection.query接收数据之前尝试进行数据操作!
我google-d并且似乎异步等待是我需要的东西,问题是,我无法在我的代码中正确地适应它。
// namesOfPeopleImFollowing is the array with the names
namesOfPeopleImFollowing.forEach(function(ele){
connection.query(`SELECT * FROM user${ele}posts`, function(error,resultOfThis){
if(error){
console.log("Error found" + error)
} else {
allPostsWithUsername.push([{username:ele},resultOfThis])
}
})
})
console.log(JSON.stringify(allPostsWithUsername)) // This is EMPTY, it mustn't be empty.
那么,我该如何将其转换为可以正常工作的东西呢?
(包括你需要整个代码,这里是:https://pastebin.com/dDEJbPfP虽然我忘了取消注释代码)
感谢您的时间。
答案 0 :(得分:1)
有很多方法可以解决这个问题。一个简单的方法是将函数包装在promise中,并在回调完成时解析。
const allPromises = [];
namesOfPeopleImFollowing.forEach((ele) => {
const myPromise = new Promise((resolve, reject) => {
connection.query(`SELECT * FROM user${ele}posts`, (error, resultOfThis) => {
if (error) {
reject(error);
console.log(`Error found${error}`);
} else {
resolve({ username: ele });
}
});
});
allPromises.push(myPromise);
});
Promise.all(allPromises).then((result) => {
// your code here
})
您可以阅读有关promise.all here
的更多信息