Javascript 迭代sequelize查询结果集(Hapijs)
我有一个返回结果的代码。通常,当我收到结果时,我会将其发送到客户端,并将其转换为纯JSON对象 但是现在我需要对结果集执行一些操作,然后在数据库中执行另一个查找 我不明白的是结果集的结构。如何正确地迭代它。我可以使用for循环手动提取值,但我觉得这不是实现的方法 这是返回结果的代码:Javascript 迭代sequelize查询结果集(Hapijs),javascript,sequelize.js,hapijs,Javascript,Sequelize.js,Hapijs,我有一个返回结果的代码。通常,当我收到结果时,我会将其发送到客户端,并将其转换为纯JSON对象 但是现在我需要对结果集执行一些操作,然后在数据库中执行另一个查找 我不明白的是结果集的结构。如何正确地迭代它。我可以使用for循环手动提取值,但我觉得这不是实现的方法 这是返回结果的代码: models.Results.findAll({ where: {ProjectId: projectId} }) .then(function (resu
models.Results.findAll({
where: {ProjectId: projectId}
})
.then(function (resultset) {
//How do I properly iterate over the resultset
for(p in resultset){
var a = p;
var something;
}
reply(resultset).code(200);
}, function (rejectedPromiseError) {
reply(rejectedPromiseError).code(401);
});
图显示调试模式下的结果。它在数组中有4个对象:当您使用
model.findAll
时,返回的resultset
是一个数组。如果您只想获取感兴趣的内容(表中的实际值),可以迭代resultset
并调用每个项,传递一个值为plain:true
的选项对象
resultset.forEach((resultSetItem) => {
console.log(resultSetItem.get({
plain: true
}));
});
您希望避免forEach操作,因为NodeJS在单个线程上运行。这很好,因为它迫使我们以不同的方式编写代码。想象一下,当forEach因为贪婪的同步操作而占用CPU时。我们需要共享资源,并始终考虑并行运行 迭代一个数组或一个数组的承诺,该数组包含承诺(或承诺和值的混合)和给定的带签名(值、索引、长度)的迭代器函数其中value是输入数组中相应承诺的解析值。迭代按顺序进行。如果迭代器函数返回承诺或表,则在继续下一次迭代之前等待承诺的结果。如果输入数组中的任何承诺被拒绝,则返回的承诺将被拒绝“很好。” 这段代码本质上是等待检索上一条记录,然后再继续下一条记录。因此,CPU速度越快,输出速度就越快
notification.sendAll = (message, cb) => {
db.models.users.findAll().then(users => {
db.Promise.each(users, user => {
console.log('user id: ' + user.id)
notification.sendMessage(message, ret => {
})
return
})
})
}
wait Request.findAll({
其中:{
S_Id:13,
客户Id:req.body.Customer\u Id,
}
}).然后(函数(结果){
res.send(结果[0][“卡号”])
quitFunction.status=true;
而不是for in
循环,尝试resultset.forEach(函数(结果){//result应该是具有您要查找的属性(dataValues、hasPrimaryKeys等)的对象);
db.Promise
在Sequelize中不是本机的,这正是OP所要求的。