我正在使用sequelizeJS。我在Promise功能中有一个Promise。我想做一个Promise函数来获取数据,然后将这些数据推入Array并返回此Array。
我尝试使用此代码,但未成功。
function sequelize_conversation (conversation_id, req) {
return new Promise((resolve, reject) => {
var response = []
for (let id of conversation_id) {
db.ConversationPerson.findAll({ where: {'conversation_id': id, 'user_id': { [Op.ne]: req.user.user_id }} })
.then(person => {
console.log(person) // results: { 'id': 1, 'name': 'John' }
response.push(person.dataValues)
})
}
resolve(response)
})
}
我得到的结果:
response = []
但是我想得到:
response = [{ 'id': 1, 'name': 'John' }]
请查看我的代码,并帮助我了解Promise功能中的Promise。预先谢谢你!
答案 0 :(得分:1)
承诺隐含异步代码...您正在解决任何db.ConversationPerson.findAll
都有机会做任何事情的情况,更不用说完成了
您的代码实际上比您想象的要简单
function sequelize_conversation (conversation_id, req) {
var promises = [];
for (let id of conversation_id) {
promises.push(
db.ConversationPerson.findAll({ where: {'conversation_id': id, 'user_id': { [Op.ne]: req.user.user_id }} })
.then(data => {
return data.dataValues
})
);
}
return Promise.all(promises);
}
或者,如果session_id是一个实际的数组,并添加一点ES6 +优点
const sequelize_conversation = (ids, req) => Promise.all(
ids.map(conversation_id =>
db.ConversationPerson.findAll({
where: {
conversation_id,
'user_id': {
[Op.ne]: req.user.user_id
}
}
})
.then(({dataValues}) => dataValues)
)
);