Я пишу некоторый код в Node.Js и использую promise.all для параллельного выполнения.Чтобы упростить проблему, я использую следующий пример кода
в MyService.ts
@Injectable()
export class MyService {
constructor(private readonly anotherService: AnotherService) { }
public async job1(a: number): Promise<MyObject> {
// try to calculate the result in parallel.
const promiseArray = [];
promiseArray.push(this.anotherService.job2(a));
promiseArray.push(this.anotherService.job2(a + 1));
promiseArray.push(this.anotherService.job2(a - 1));
await Promise.all(promiseArray).then((results: MyObject[]) => {
for (const obj of results) {
if (obj.Index === 1) {
return obj;
}
}
});
return null;
}
}
anotherService.job2()
имеет тип возврата Promise<MyObject>
.
Я подготовил свои тестовые данныеустановите точку останова на return obj;
и return null;
, и она сначала остановится на return obj;
, а затем на return null;
.Поэтому вызывающий этой функции в конечном итоге получает null
.
Если я изменю код на
@Injectable()
export class MyService {
constructor(private readonly anotherService: AnotherService) { }
public async job1(a: number): Promise<MyObject> {
// try to calculate the result in parallel.
const promiseArray = [];
promiseArray.push(this.anotherService.job2(a));
promiseArray.push(this.anotherService.job2(a + 1));
promiseArray.push(this.anotherService.job2(a - 1));
const results = await Promise.all(promiseArray);
for (const obj of results) {
if (obj.Index === 1) {
return obj;
}
}
return null;
}
}
Это работает.
Как правильно использовать Promise.all
и вернуть результат из него?Когда я должен использовать Promise.all().then()
?