如何将 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);
我有一个 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);