如何在查询中获取查询对象?

3
我有一个包含查询字符串的对象数组。我按照键循环遍历查询。查询按预期工作,但键值未被打印出来。
query = { 
   A: { code: { '$in': ['A'] }},
   B: { code: { '$in': ['B'] }} 
}

for (keyQuery of  Object.keys(query)) {
   console.log("outside",keyQuery );

   testcollection
      .find(query[keyQuery],{_id:0})
      .then(data => {
          console.log("inside",keyQuery);
      });
}

当前的输出为

outside A
outside B
inside B
inside B

期望输出结果为:

outside A
outside B
inside A
inside B

我犯了什么错误


什么是testcollection?它是一个承诺数组吗?它是异步执行的吗? - Gh05d
这是一个Mongoose集合。 - user1187
1个回答

2

你遇到问题的最可能原因是var关键字。请使用let关键字定义keyQuery,以便它具有块级作用域。

for (let keyQuery of  Object.keys(query)) {
   // code
}

如果在使用 keyQuery 变量之前没有声明它,它将使用 var 关键字全局声明。

const testCollection = {
  find() {
    return new Promise((resolve, reject) => {
      setTimeout(() => resolve(2), 2000);
    });
  }
}

const query = { 
   A: { code: { '$in': ['A'] }},
   B: { code: { '$in': ['B'] }} 
}

for (let keyQuery of  Object.keys(query)) {
   console.log("outside",keyQuery );

   testCollection
      .find()
      .then(data => {
          console.log("inside",keyQuery);
      });
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接