如何将数组从一个回调传递到另一个回调或不同的块,

时间:2017-02-08 10:10:57

标签: node.js

  1. 我必须传递第二个if(type ===“1”)
  2. 中的所有用户ID
  3. 这是我的代码我做错了什么:

    var list = [];
    
    if (type === "0") {
      console.log("# send to users #");
      var query = "SELECT user_id FROM users WHERE user_id = " + id;
      connection.query(query, function(err, rows) {
        if (err) {
          console.log(err);
          throw err;
        } else {
          if (rows.length > 0) {
            for (i = 0; i < rows.length; i++) {
              list.push(rows[i].user_id);
            }
          }
        }
      });
    }
    if (type === "1") {
      console.log(list); //empty
       console.log("# send to group users #");
      var query = "SELECT *FROM group_users WHERE group_id = " + id;
      connection.query(query, function(err, rows) {
        if (err) {
          console.log(err);
          throw err;
        } else {
          if (rows.length > 0) {
            for(i=0;i<rows.length;i++){
             if(list.user_id !== rows[i].group_user_id){
                   console.log(rows[i].group_user_id); // need to display only those user who is not in the users table
             }
            }
          }
        }
      }); 
    }
    
  4. 我的目的是仅向不同的用户发送更新联系人消息, 由于用户可能在组中连接,所以我想只是不同的用户。

1 个答案:

答案 0 :(得分:0)

不清楚你想要做什么,但有些事情你做错了。首先,当键入===&#39; 1&#39;时,列表将始终为空,我认为这就是您正在讨论的问题。 其次,列出一个数组,所以这行代码......

if(list.user_id !== rows[i].group_user_id)

将永远不会按您的意愿工作,因为作为数组的列表没有名为&#39; user_id&#39;的键。 澄清一些概念:

var ex1 = { user_id: '123'};
var ex2 = [123];
console.log(ex1.user_id); //123
console.log(ex2[0]); //123

对于你所说的猜测你需要&#34;类型===&#39; 1&#39;&#34;的列表值。部分,所以你应该在两个if语句之前得到那些值,然后用你喜欢的数据做,对于我所理解的,你不需要回调来处理这个。 像这样:

var list = getListValues();
if(type==='0'){
//do whatever you want
}
if(type==='1'){
//now you have the list values here
}

希望这有帮助。