如何将sequelize查询的结果推送到数组

时间:2016-02-09 19:49:27

标签: mysql node.js sequelize.js

我有一个node.js应用程序,我正在为数据库使用sequelize和mysql。

我一直在查看sequelize和bluebird文档,试图找到一种方法将sequelize查询推送到一个数组。 我有一个循环的订单数组,然后对地址模型进行查询。

我的查询如下:

    var objArr = [];
    models.address.findById(6).then(function(address){
      objArr.push(address);
    });
    console.log(objArr);

如果我在查询中移动console.log它可以工作,但是objArr外面是空的。我想弄清楚为什么会这样。是不是可以这样做?我在这里找不到答案或上面提到的文档。如果有人能指出我正确的方向,我愿意阅读更多文档

3 个答案:

答案 0 :(得分:0)

您的代码是异步的,这意味着您的console.log在推送之前执行:

var objArr = [];
models.address.findById(6).then(function(address){
  objArr.push(address);
});
console.log(objArr);  // This code is executed before the objArr.push(address);

答案 1 :(得分:0)

这是因为回调是异步的...顺序如下:

var objArr = [];

models.address.findById(6);  //makes query, starts waiting for a response

// array is empty at this point
console.log(objArr);

//at a later time got answer, invoking callback
.then(function(address){

})

这是伪代码,只是为了说明这一点。此代码无效

你可能会尝试这样做:

function () {
  var objArr = [];
  models.address.findById(6).then(function(address){
    objArr.push(address);
  });
  console.log(objArr);
  return objArr
}

相反,您应该将所有这些作为异步代码处理。回调示例:

function (callback) {
  models.address.findById(6).then(function(address){
    callback(address);
  });
}

或者你应该查看Promises。那就是"。然后"

来自

答案 2 :(得分:0)

您可以执行以下操作:

var objArr = [];
models.address.findById(6).then(function(address){
  objArr.push(address);
  return objArr;
})
.then(console.log);
相关问题