如何获得循环值

时间:2019-04-19 12:19:37

标签: javascript node.js loops

如何获取循环外的循环值。 我解释了我的问题:

我有一个循环。在此循环中,我提出了几个请求。我希望每个请求都检索变量的值,然后在循环末尾显示所有内容。

这是我的代码的示例示例:

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 =“创建用户” / store.state =“更新用户”)。 我想获得的是:

[ { 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' } ]

我该怎么办?我认为这与异步方法有关。如果是这样,如何使同步? (带着诺言?我承认这对我来说很模糊)

1 个答案:

答案 0 :(得分:0)

首先,您似乎两次填充了阵列

store.action = "excel Valid"; 
log.push(store)

以及稍后在您的查询回调中

if (results1.length > 0)
{
 store.state = "update user";
 log.push(store)
}
// user create
else
{
 store.state = "create user";
 log.push(store)
}

根据此,您应该有一个这样的var日志:

[ { action: 'excel Valid' },
  { action: 'excel Valid' },
  { action: 'excel Valid' },
  { action: 'excel Valid' },
  { action: 'excel Valid' } 
  { action: 'update user' } 
  { action: 'update user' } 
  { action: 'create user' } 
  { action: 'create user' } 
  { action: 'create user' } ]

但是没有,所以让我认为回调没有启动或没有返回预期的格式或值,所以我们可以看到查询响应吗?