Problem polega na tym, że próbujesz utworzyć tablicę o numerze await
. To nie robi tego, czego się spodziewasz.
Gdy obiekt przekazany do await
nie jest Obietnicą, po prostu zwraca wartość tak jak jest, zamiast próbować ją rozwiązać. Ponieważ więc zamiast Promise podałeś await
tablicę (Obietnica obiektów), wartość zwrócona przez oczekujący jest po prostu tą tablicą, która jest typu Promise<number>[]
.
Należy tutaj zadzwonić pod numer Promise.all
w tablicy zwróconej przez map
w celu przekonwertowania go na pojedynczą obietnicę przed await
.
Według MDN docs for Promise.all
:
The Promise.all(iterable)
method returns a promise that resolves when all of the promises in the iterable argument have resolved, or rejects with the reason of the first passed promise that rejects.
Więc w twoim przypadku:
var arr = [1, 2, 3, 4, 5];
var results: number[] = await Promise.all(arr.map(async (item): Promise<number> => {
await callAsynchronousOperation(item);
return item + 1;
}));
To będzie rozwiązać konkretny błąd jesteś napotykają tutaj.
Dlaczego starasz się zrobić synchroniczną pracą w operacji asynchronicznej? 'arr.map()' jest synchroniczne i nie zwraca obietnicy. – jfriend00
Nie można wysłać operacji asynchronicznej do funkcji, takiej jak 'map', która oczekuje synchronicznej i oczekuje, że zadziała. –
@ jfriend00 Mam wiele oczekujących oświadczeń w wewnętrznej funkcji. Jest to w rzeczywistości długa funkcja, którą uprościłem, aby była czytelna. Dodałem teraz oczekujące połączenie, aby wyjaśnić, dlaczego powinien być asynchroniczny. – Alon