【问题标题】:Sequelize query inside then()在 then() 中对查询进行续集
【发布时间】:2018-01-08 06:40:18
【问题描述】:

尝试:

  1. 获取用户列表
  2. 从用户详细信息中获取用户创建的行程
  3. 并根据输出执行一些操作

以下是我尝试运行的代码。

models.user.findAll({})
    .then(function (users) {
        for (var i = 0; i < users.length; i++) {
            var userName = users[i].name;
            var userEmail = users[i].email;

            models.trip.findOne({ attributes: [ [userName, 'name'], [userEmail, 'email'], 'id' ], where: { userId: users[i].id } })
                .then(function (trip) {
                    if (trip == null) {
                        //Send Emails
                    }
                });
        }
    })
    .catch(function (error){ // enter code here
        console.log(">>>>>",error);
    });

由于回调,第二个 Sequelize 运行不正确。

您能否就如何解决此问题提出建议?是否使用 asyncawait/coyield?

【问题讨论】:

    标签: node.js callback promise sequelize.js


    【解决方案1】:

    例如,您应该使用 console.log 进行调试。首先你应该尝试打印你的第一个回调结果,可能是数据库连接没有正确配置,也可能是表是空的。有很多原因。使用 .forEach 方法而不是 'for' 循环也更舒服

    array.forEach((item, i, arr)=>{
        ///....
    })
    

    【讨论】:

      【解决方案2】:

      不要在 for 和任何循环中使用异步方法。最好使用Promise.all 或任何异步库。 代码会是这样的。

      var tasks = []
      users.forEach(function (user) {
          tasks.push(models.trip({/*some attrs*/}).then(function (trip){
              if (trip) return Promise.resolve()
              return sendEmailPromise(user)
          }))
      })
      Promise.all(tasks).then(function() {
          //done
      }).catch(errorHandler)
      

      【讨论】:

        【解决方案3】:

        如果模型具有关联,那么您可以只包含另一个模型并向其添加 where 子句。 Sequelize Docs

         User.hasMany(Trips, {foreignKey: 'userId'});
        
         User.findAll({
           include: {
             model: Trips,
             where: {userId: id}
           }
         });
        

        【讨论】:

          猜你喜欢
          • 2016-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-17
          • 1970-01-01
          • 2020-11-12
          • 2018-10-16
          • 2022-11-03
          相关资源
          最近更新 更多