Foreach 循环太快
Foreach loop goes too fast
这是我正在使用的循环:
client.users.forEach(user => {
if (user.presence.status == "online") {
fnHistory.userUpdate(user.id, status, false, message);
}
});
里面的函数调用这个:
client.channels.get("495635013073895429").fetchMessage("495636761926434818").then(message => {
message.edit(`${message.content} \n \t - ${name}`);
});
我正在尝试为现有消息附加一个新名称。但是在 foreach 循环之后它只显示姓氏。
这就是 foreach 中 2 个元素的处理方式 ['foo', 'bar']:
- foreach 之前:"Currently tracking:"
- 第一次迭代:采用"Currently tracking:"并附加“-foo”
- 第二次迭代:采用 "Currently tracking:" 并附加“- bar”。 (但它应该取 "Currently tracking: - foo" 然后附加“-bar”)
- 完成得像 "Currently tracking: - bar"
我搜索了很多并且已经尝试让每个函数都使用 promise 但 foreach 并不关心这个。我也尝试使用 delay/timeout。
但是没有成功...
这可以通过多种方式实现。但是在我们开始之前,您需要将您的处理函数修改为 return 这样的承诺
function () {
return client.channels.get("495635013073895429")
.fetchMessage("495636761926434818").then(message => {
message.edit(`${message.content} \n \t - ${name}`);
});
}
然后您可以使用reduce
或编写async
函数来序列化处理。
使用减少:
client.users.reduce((previousIteration, user => {
if (user.presence.status === "online") {
return previousIteration.then(() => fnHistory.userUpdate(user.id, status, false, message));
}
return previousIteration;
}, Promise.resolve());
使用异步函数:
async function updateOnlineUsers() {
for (const user of client.users) {
if (user.presence.status === "online") {
await fnHistory.userUpdate(user.id, status, false, message));
}
}
}
这是我正在使用的循环:
client.users.forEach(user => {
if (user.presence.status == "online") {
fnHistory.userUpdate(user.id, status, false, message);
}
});
里面的函数调用这个:
client.channels.get("495635013073895429").fetchMessage("495636761926434818").then(message => {
message.edit(`${message.content} \n \t - ${name}`);
});
我正在尝试为现有消息附加一个新名称。但是在 foreach 循环之后它只显示姓氏。
这就是 foreach 中 2 个元素的处理方式 ['foo', 'bar']:
- foreach 之前:"Currently tracking:"
- 第一次迭代:采用"Currently tracking:"并附加“-foo”
- 第二次迭代:采用 "Currently tracking:" 并附加“- bar”。 (但它应该取 "Currently tracking: - foo" 然后附加“-bar”)
- 完成得像 "Currently tracking: - bar"
我搜索了很多并且已经尝试让每个函数都使用 promise 但 foreach 并不关心这个。我也尝试使用 delay/timeout。 但是没有成功...
这可以通过多种方式实现。但是在我们开始之前,您需要将您的处理函数修改为 return 这样的承诺
function () {
return client.channels.get("495635013073895429")
.fetchMessage("495636761926434818").then(message => {
message.edit(`${message.content} \n \t - ${name}`);
});
}
然后您可以使用reduce
或编写async
函数来序列化处理。
使用减少:
client.users.reduce((previousIteration, user => {
if (user.presence.status === "online") {
return previousIteration.then(() => fnHistory.userUpdate(user.id, status, false, message));
}
return previousIteration;
}, Promise.resolve());
使用异步函数:
async function updateOnlineUsers() {
for (const user of client.users) {
if (user.presence.status === "online") {
await fnHistory.userUpdate(user.id, status, false, message));
}
}
}