【发布时间】:2021-04-28 19:58:38
【问题描述】:
我遇到了这个承诺的问题。在 forEach 带有返回用户对象的函数之后,数组(客户端)的变量变为空( [] )。 Ngl 我不知道如何解决这个问题。感谢您的时间:))
function getAdminUsers(adminGroups) {
return new Promise(async (resolve) => {
try {
var clients = new Array();
console.log(adminGroups);
await adminGroups.forEach(async (group) => {
clients[group] = await teamspeak.serverGroupClientList(group);
});
console.log('CLIENTS', clients);
resolve(clients);
} catch (error) {
handleServerQueryError(error);
}
});
}
adminGroups 数组:
module.exports = {
adminGroups: [6, 277, 14, 18, 17, 16, 13, 528, 568],
};
终端输出:
New user connected from 188.146.229.188
[
6, 277, 14, 18,
17, 16, 13, 528,
568
]
CLIENTS []
【问题讨论】:
-
这个构造
await adminGroups.forEach(...)不起作用。使用await的常规循环或查看Promise#all()。 -
请不要这样做
new Promise(async ...)每个async function都会总是返回一个Promise。那么你需要new Promise()做什么?另外,在您的特定情况下,带有catch (error)的部分会造成内存泄漏,因为它永远不会解决您创建的new Promise()。 -
@Thomas Never-resolved Promise 不会泄漏内存,它们会像其他所有东西一样被垃圾回收。
标签: javascript node.js arrays promise async-await