2017-08-01 74 views
0

嘗試:Sequelize查詢()內

  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嗎?

回答

0

你應該通過使用console.log來調試這個例子。首先你應該嘗試打印你的第一個回調結果,可能是數據庫連接沒有正確配置,可能是表空了。有很多原因。同時它更舒適地使用.forEach方法,而不是「for」循環

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

不要使用的異步方法和任何環路。最好使用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) 
+0

謝謝。我能夠使用Promise.All解決這個問題。 – Shiva

0

如果這些模型具有關聯性,那麼您可以包含其他模型並添加where子句。 Sequelize Docs

User.hasMany(Trips, {foreignKey: 'userId'}); 

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