Sequelize中的承诺:如何从每个承诺中获得结果

dpo*_*kov 12 javascript promise sequelize.js bluebird

在Sequelize> = 1.7中,我们可以使用promises

你能解释一下我如何从这个代码中获得每个用户的值:

var User = sequelize.define("user", {
  username: Sequelize.STRING
})


User
  .sync({ force: true })
  .then(function() { return User.create({ username: 'John' }) })
  .then(function(john) { return User.create({ username: 'Jane' }) })
  .then(function(jane) { return User.create({ username: 'Pete' }) })
  .then(function(pete) {
    console.log("we just created 3 users :)")
    console.log("this is pete:")
    console.log(pete.values)

    // what i want:
    console.log("this is jane:")
    console.log(jane.values)

    console.log("this is john:")
    console.log(john.values)
  })
Run Code Online (Sandbox Code Playgroud)

UPD

所有值都需要与其他模型设置关联.其实我需要一些像这样的代码:

User.hasMany(Group)
Group.hasMany(User)

User
  .sync({ force: true })
  .then(function() { return User.create({ username: 'John' }) })
  .then(function(john) { return User.create({ username: 'Jane' }) })
  .then(function(jane) { return User.create({ username: 'Pete' }) })
  .then(function(pete) { return Group.findOrCreate({id: 1}) })
  .then(function(group) {return group.setUsers([john, jane, pete])})
  .then(function(result) { console.log(result)})
})
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 21

Bluebird方式是集合辅助函数.

如果要并行创建它们,请使用map:

User.sync({ force: true })
  .then(function() {
    return Promise.map( ['John', 'Jane', 'Pete'], function(name) {
      return User.create({ username: name });
    })
  }).spread(function(john, jane, pete) {
    console.log("we just created 3 users :)")
    console.log("this is john:")
    console.log(john.values)
    console.log("this is jane:")
    console.log(jane.values)
    console.log("this is pete:")
    console.log(pete.values)
  })
Run Code Online (Sandbox Code Playgroud)

如果您需要连续创建它们,只需将其更改为mapSeries(3.0+)即可.

如果数组不需要是动态的,并且您只想通过承诺链传递共享值(如示例中所示),请查看如何在.then()链中访问先前的承诺结果?.

  • 只想提一下`.sync({force:true})`将删除当前数据库中的所有表.小心! (4认同)

Ant*_*Chu 3

尝试这个...

User
    .sync({ force: true })
    .then(function () {
        return User.create({ username: 'John' });
    })
    .then(function (john) {
        console.log("this is john:");
        console.log(john.values);
        return User.create({ username: 'Jane' });
    })
    .then(function (jane) {
        console.log("this is jane:");
        console.log(jane.values);
        return User.create({ username: 'Pete' });
    })
    .then(function (pete) {
        console.log("we just created 3 users :)");
        console.log("this is pete:");
        console.log(pete.values);
    });
Run Code Online (Sandbox Code Playgroud)