我在 sequelize 中创建了两个模型。我得到了一系列结果“用户”,然后根据 User.id 循环获取或创建新的“房间”。完成后我想打印所有房间。我在控制台中得到了空数组,因为它是异步的。创建所有房间后如何调用 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 执行一系列 promise :

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);
});

关于javascript - 如何在 Node.js 中添加 promise.all 循环中的 Sequelize findOrCreate?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40398376/

10-09 22:18