【发布时间】:2019-09-09 17:15:23
【问题描述】:
如何在循环之外获取循环值。 我解释我的问题:
我有一个循环。在这个循环中,我提出了几个请求。我希望每个请求都检索变量的值,然后在循环结束时显示所有内容。
这是我的代码示例:
var log = [];
for (var i = 0; i < result.length; i++){
validateExcelJson(result[i], function(id) {
if(result[i].EMAIL != "") {
var query = "SELECT id as ID from Table_users where DELETED = 0 and LOWER(AES_DECRYPT(EMAIL, '"+cryptoKey+"')) = LOWER('" + result[i].EMAIL + "');";
var data = result[i];
store.action = "excel Valid";
log.push(store)
console.log("test")
connection.query(query, function (error, results1, fields) {
console.log("test 1")
if (error) throw error;
if (results1.length > 0)
{
store.state = "update user";
log.push(store)
}
// user create
else
{
store.state = "create user";
log.push(store)
}
});
}
});
}
console.log(log)
这是我得到的:
test
test
test
test
[ { action: 'excel Valid' },
{ action: 'excel Valid' },
{ action: 'excel Valid' },
{ action: 'excel Valid' },
{ action: 'excel Valid' } ]
test 1
test 1
很遗憾我没有存储值(store.state = "create user" / store.state = "update user")。 我想得到的是:
[ { action: 'excel Valid', state: 'update user' },
{ action: 'excel Valid', state: 'update user' },
{ action: 'excel Valid', state: 'create user' },
{ action: 'excel Valid', state: 'create user' },
{ action: 'excel Valid', state: 'create user' } ]
我该怎么办?我认为这与异步方法有关。如果是这样,如何使同步? (承诺?我承认这对我来说非常模糊)
【问题讨论】:
-
这篇 SO 帖子可能会有所帮助 (stackoverflow.com/questions/31775177/…)
-
console.log在调用query中的回调之前运行,这就是您没有结果的原因。 -
你可以把最后一个
console.log(log);放在一个单独的函数中,当日志完全填满时调用这个函数。假设单独的函数叫做doConsoleLog(),那么在connectionQuery的回调函数的最后,可以写if (log.length == result.length*2) doConsoleLog();
标签: javascript node.js loops