【发布时间】:2014-07-03 01:31:28
【问题描述】:
我的节点 js 应用程序中有一个 for 循环;在每次迭代的这个循环中,可以执行一个 mysql 查询(并不总是,取决于);查询是异步的,我在成功回调中得到结果;但我需要 for 循环的每次迭代都等待回调完成(如果需要):
function calculate() {
var resArray = [];
//[...]
for (i = 0; i < tables.length; i++) {
if (id !== undefined) {
var queryString = ... //build query
sequelize.query(queryString).success(function(result) { //executes query
id = result[0].id;
//do stuff with id returned by the query
//...
//resArray.push( //push in resArray the result of stuff done above )
});
}
else {
//do other kind of stuff and push result in resArray
}
}
return resArray;
}
如果 id != undefined,则执行查询,但 for 循环不等待成功回调,并且函数返回不完整的 resArray。
我该怎么做(或如何重新组织代码)来完成这项工作? (我正在使用 node js,我没有可能使用 jQuery)。
【问题讨论】:
-
你是否意识到 node.js 是单线程的,它会冻结所有其他请求?
-
不,循环不会等待。你需要让你的应用异步。
-
学习 promise 的好时机
-
您可以使用 Google Traceur,它可以访问 ES6 功能,例如
yield。然后你可以有异步的for循环,里面有yield。更多细节:stackoverflow.com/a/23234019/1768303