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

How to push the result of a sequelize query to an array

我有一个 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 外部是空的。我想弄清楚为什么会这样。不可能这样做吗?我在这里找不到答案,也找不到我上面提到的文档。如果有人能给我指明正确的方向,我愿意阅读更多文档

您的代码是异步的,这意味着您的 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);

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

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。这就是“.then”的来源

您可以这样做:

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