gpt4 book ai didi

Javascript Promise.all 困惑

转载 作者:行者123 更新时间:2023-11-28 05:21:56 25 4
gpt4 key购买 nike

我使用 Javascript/Typescript 来格式化 PersonModel 对象集合上的 password 值。我正在集合中的每个元素上执行 Promise

我正在使用 Promise.all 来允许所有 Promise 完成,然后想要返回格式化的集合。

但是,我在构建时遇到错误。

PersonService.ts

private decryptPersons(persons: PersonModel[]): Promise<PersonModel[]> {
return new Promise<PersonModel[]>(resolve => {
let promises: Array<Promise<string>> = [];
let decryptedPersons: PersonModel[] = [];
for (let i: number = 0; i < persons.length; i++) {
let ciphertext: string = persons[i].password;
promises.push(this.decrypt(ciphertext).then((password: string) => { // <== line 357
persons[i].password = password;
decryptedPersons.push(persons[i]);
}));
}
Promise.all(promises).then(() => {
resolve(decryptedPersons);
});
});
}

private decrypt(value: string): Promise<string> {
return new Promise<string>(resolve => {
this.encrypter.decrypt(value).then((result: string) => {
resolve(result);
});
});
}

错误

ERROR in ./app/pages/service/personService.ts
(357,31): error TS2345: Argument of type 'Promise<void>' is not assignable to parameter of type 'Promise<string>'.
Type 'void' is not assignable to type 'string'.

我不是 Javascript 专家,所以我的结构可能不正确。如果有人能给我建议,我将不胜感激。

最佳答案

您正在尝试push将以下内容输入您的 promises数组:

this.decrypt(ciphertext).then((password: string) => {  // <== line 357
persons[i].password = password;
decryptedPersons.push(persons[i]);
})

但是这里的函数不会返回任何内容,因此计算结果为 Promise<void> .

您还在此处的多个地方滥用了“显式 promise 构造反模式”。

尝试一下:

private decryptPersons(persons: PersonModel[]): Promise<PersonModel[]> {
return Promise.all(persons.map(person =>
this.decrypt(person.password)
.then(password => {
person.password = password;
return person;
});
));
}

private decrypt(value: string): Promise<string> {
return this.encrypter.decrypt(value);
}

关于Javascript Promise.all 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40481895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com