【发布时间】:2019-03-25 17:41:16
【问题描述】:
如何在 forEach 循环结束后回调 timer() 函数,使用相同的代码。还是有更好的方法来延迟循环遍历每个用户,然后在循环完成后,使用 forEach 回调 timer()。
const usersProfile = () => {
let interval = 1000;
let promise = Promise.resolve();
db.select('*').from('users')
.returning('*')
.then(users => {
users.forEach((user, index) => {
setTimeout(function(){
}, index * 1000)
db.select('*').from(`${user.name}`)
.returning('*')
.then(userdata => {
userdata.forEach(data => {
promise = promise.then(function(){
if(data.status === 'online'){
console.log(`${data.name} ${data.items} ${data.profile} ${data.images}`)
}
return new Promise(function(resolve){
setTimeout(function(){
resolve();
}, interval)
})
})
})
})
})
timer();
})
}
const timer = () => {
setTimeout(usersProfile, 1000)
}
timer();
===============以上都是我的旧代码================ 但感谢https://stackoverflow.com/users/2404452/tho-vu 它解决了大部分问题,但我可以这样做以服务于应用程序的目的吗
const usersProfile = async () => {
let interval = 1000;
const delayPromise = (data, delayDuration) => {
return new Promise((resolve) => {
setTimeout(() => {
if(data.status === 'online'){
console.log(`${data.name} ${data.items} ${data.profile} ${data.images}`);
resolve();
}
}, delayDuration)
});
};
const userInfo = (data, delayDuration) => {
return new Promise((resolve) => {
setTimeout(() => {
console.log(`${data.info}`);//info about user from his table each user has his own table besides users table that has only the user tables
resolve();
}, delayDuration)
});
};
try {
const userData = await db.select('*').from('users').returning('*');
const promises = userData.map((data, index) => delayPromise(data, index * interval));
const userData = await db.select('*').from(`${data.name}`).returning('*');
const info = userData.map((data, index) => userInfo(data, index * interval));
await Promise.all(promises);
// here you can write your effects
} catch (e) {
console.log(e);
}
}
【问题讨论】:
-
你试过
if index = last then use timer() -
@BenjaminGruenbaum 你能给我一个例子来处理我的案例吗?我将不胜感激,我已经阅读了它,但仍然不知道如何在我的代码中使用它
-
@BladeMight 是的,但没用。
标签: javascript node.js