在循环中promise之后返回数组



我正在尝试在运行循环并每次调用promise之后聚合响应。但是,该函数不会等待所有的承诺都完成,并返回undefined。

getAllPluginImpls(): DesktopPluginDefinitionImpl[] {
let pluginArray: DesktopPluginDefinitionImpl[] = [];
let promises = [];
Array.from(this.pluginMap.keys()).forEach(id =>
promises.push(this.pluginManager.findPluginDefinition(id).then(
def => {
console.log("id");
console.log(id);
console.log("def");
console.log(def);
let pluginImpl = def as DesktopPluginDefinitionImpl;
pluginArray.push(pluginImpl);
}
)
)
);
Promise.all(promises).then(s => {
console.log("end reached :(");
console.log(pluginArray);
return pluginArray;
});
}

首先,您应该返回Promise<DesktopPluginDefinitionImpl[]>,其次,正如注释中所指出的,通过避免在作用域数组中使用.forEach().push()条目,您的方法的复杂性将大大简化。

getAllPluginImpls(): Promise<DesktopPluginDefinitionImpl[]> {
const pluginArray: Promise<DesktopPluginDefinitionImpl>[] = Array.from(
this.pluginMap.keys(),
id => this.pluginManager.findPluginDefinition(id)
);
return Promise.all(pluginArray);
}

需要澄清的是,Promise<DesktopPluginDefinitionImpl>[]而不是一个拼写错误。Promise.all()将一个promise数组转换为一个数组的promise。

最新更新