【发布时间】:2017-09-18 12:21:34
【问题描述】:
我正在尝试在 nodejs 中编写一个 cron 函数,该函数从数据库中获取所有用户的 user_id,然后我想解析每个 user_id。
这是我的代码:
cron.schedule('43 11 * * *', function(){
var now = moment()
var formatted = now.format('YYYY-MM-DD HH:mm:ss')
console.log('Starting the cron boss!');
var dbSelectPromise = function(db, sql1) {
return new Promise(function(resolve, reject) {
db.select(sql1, function(err, data) {
if (err) {
reject(err)
} else {
resolve(data)
}
})
})
}
var users =[]
var sql = "select distinct(user_id) from user_level_task"
dbSelectPromise(db,sql).then(function(secondResult){
for(i=0;i<secondResult.length;i++){
var sql1 = "select max(level_id) as level from user_level_task where user_id ="+secondResult[i].user_id
dbSelectPromise(db,sql1).then(function(thirdResult){
console.log(thirdResult)
console.log(current)
var sql2 = "select task_id form user_level_task where user_id = '"+secondResult[i].user_id+"' and level_id = '"+thirdResult[0].level+"' "
dbSelectPromise(db,sql2).then(function(fourthResult){
var leng = fourthResult.length
for(i=0;i<leng;i++){
console.log(fourthResult[i])
}
})
})
}
})
});
我面临的问题是我无法在第三和第四个承诺中访问 i 的值。请帮忙!
【问题讨论】:
-
在 dbSelectPromise 函数中将 return 放在 db.select 之前
-
尝试简化您的解决方案。
-
你可以在答案中进行编辑
-
添加了返回,但第二个结果仍然未定义
-
哦,因为您使用的是 for 循环,所以它不起作用。你可以使用developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 或者你可以使用异步库 (caolan.github.io/async/docs.html) 每个方法来迭代你的第一个数据集
标签: node.js loops express promise