使用NodeJS,我试图从ID列表中获取数据信息并填充对象数组。我需要这个同步处理。我无法弄清楚如何执行此操作,因此下一个函数调用将在被调用之前等待前一个函数调用完成。然后所有的'每个'迭代完成返回被调用。
示例:
group by
这是一个简化的示例,因此假设获取所有信息的单个查询将无法正常工作,因为有多个连接正在进行并且后处理需要在js中进行。另外,假设我正在进行适当的错误处理,我在我的示例中省略了。
答案 0 :(得分:0)
您的数据库查询是异步的,因此您需要使用回调或承诺在数据库返回结果后执行您的工作。
function getListOfIDs(callback) {
// database call to get IDs
db.query('...', function(data) {
// call the callback and pass it the array
callback(data);
});
}
function getInfo() {
// pass an anonymous function as a callback
getListofIDs(function(data) {
// we now have access to the data passed into the callback
console.log(data);
});
}
答案 1 :(得分:-1)
您当前的代码示例是同步的,但我不知道您的db代码是如何工作的。每个循环是同步的,它只是迭代你的id并调用getFullInfo函数。
我不确定你为什么要同步代码,因为它没有使用节点事件循环架构。
我要做的是使用一个好的Promises框架,比如Bluebird(http://bluebirdjs.com/docs/api/promise.each.html)和Promise.each,确保每次迭代都是连续发生的。或者您也可以使用async(http://caolan.github.io/async/)等回调库与async.eachSeries。这些中的任何一个都将确保您(a)获得异步的好处和(b)以串行方式迭代。
答案 2 :(得分:-2)
承诺这样做:
function getListOfIDs() {
return new Promise((resolve, reject) => {
// database call
if (err)
{
reject(your_db_err);
return;
}
resolve(your_db_result);
});
}
function getInfo() {
getListOfIDs().then((result) => {
//do whatever you want with result
})
.catch((err) => {
//handle your err
});
}