[英]How to add promise.all in Node.js Sequelize findOrCreate in loop?
我在續集中創建了兩個模型。 我得到了結果“ Users”的數組,然后循環遍歷以基於User.id來獲取或創建新的“ Room”。 完成后,我想打印所有房間。 我在控制台中得到了空數組,因為它是異步的。 創建所有房間后如何調用console.log?
var Users = sequelize.import(__dirname + "/../models/own/user");
var Rooms = sequelize.import(__dirname + "/../models/own/room");
var _this = this;
this.users = [];
this.rooms = [];
Users.findAll().then(function(users) {
_this.users = users;
users.forEach(function(user){
Rooms.findOrCreate({where: {user_id: user.get('id')}})
.spread(function(room, created) {
_this.rooms.push(
room.get({
plain: true
})
);
});
});
console.log(_this.rooms)
});
您可以通過Promise.all執行諾言數組:
var promises = users.map(function(user){
return Rooms.findOrCreate({where: {user_id: user.get('id')}});
});
Promise.all(promises).then(function(dbRooms){
for(var key in dbRooms){
_this.rooms.push(dbRooms[key][0].get({plain: true}));
}
console.log(_this.rooms);
});
嘗試將console.log
放在.then
函數中。 .spread之后將其鏈接。 我相信房間的數組將作為參數傳遞給第一個回調:
.then(function(rooms){
...
})
要么,
您可以嘗試重構代碼並將邏輯放入.then
函數中。
Rooms.findOrCreate({where: {user_id: user.get('id')}})
.then(function(rooms, created) {
var room;
for(var i in rooms){
room = rooms[i];
_this.rooms.push(
room.get({
plain: true
})
);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.