使用多个线程执行多个 sequelize 查询
Perform multiple sequelize query with multiple threads
我目前正在使用 await 一个一个地执行所有查询,因此在 res.send(),
之前获取所有数据
var classes = await Classes.findAll({ where: { isActive: 'Y' } })
var users = await Users.findAll({ where: { isActive: 'Y' } })
var calender = await Calender.findAll({ where: { isActive: 'Y' } })
res.status(500).send({classes, users, calender})
我想要的是,每个查询都由不同的线程执行,并在 res.send() 之前等待,这样可以节省执行时间。
我相信有一个使用 Sequelize 的更好的解决方案。
虽然这与多线程不完全相同,但您正在寻找的解决方案是异步执行的并发查询。对于结果不相互依赖的任何异步 I/O,这确实是最佳解决方案。
使用Promise.all()
同时解决所有查询。您可以使用数组解构器来获取从每个承诺返回的每个值。
当变量的值不会改变时,最好使用 const
而不是 var
。
const where = { isActive: 'Y' };
const [ classes, users, calender ] = await Promise.all([
Classes.findAll({ where }),
Users.findAll({ where }),
Calender.findAll({ where }),
]);
res.status(500).send({classes, users, calender});
注意 - 你也有打字错误,“calender”应该是“calendar”
我目前正在使用 await 一个一个地执行所有查询,因此在 res.send(),
之前获取所有数据 var classes = await Classes.findAll({ where: { isActive: 'Y' } })
var users = await Users.findAll({ where: { isActive: 'Y' } })
var calender = await Calender.findAll({ where: { isActive: 'Y' } })
res.status(500).send({classes, users, calender})
我想要的是,每个查询都由不同的线程执行,并在 res.send() 之前等待,这样可以节省执行时间。
我相信有一个使用 Sequelize 的更好的解决方案。
虽然这与多线程不完全相同,但您正在寻找的解决方案是异步执行的并发查询。对于结果不相互依赖的任何异步 I/O,这确实是最佳解决方案。
使用Promise.all()
同时解决所有查询。您可以使用数组解构器来获取从每个承诺返回的每个值。
当变量的值不会改变时,最好使用 const
而不是 var
。
const where = { isActive: 'Y' };
const [ classes, users, calender ] = await Promise.all([
Classes.findAll({ where }),
Users.findAll({ where }),
Calender.findAll({ where }),
]);
res.status(500).send({classes, users, calender});
注意 - 你也有打字错误,“calender”应该是“calendar”