[ Leksykon ] [ JavaScript ] [ Tablice ] [ Metody ] [ Właściwości ] [ Array() ]
Array.fromAsync()
fromAsync Chrom NIE
[_] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Przykłady:
Array.fromAsync(
new Map([
[1, 2],
[3, 4],
]),
).then((array) => console.log(array));
// [[1, 2], [3, 4]]
const asyncTablica = (async function* () {
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 10 * i));
yield i;
}
})();
Array.fromAsync(asyncTablica).then((array) => console.log(array));
// [0, 1, 2, 3, 4]
Array.fromAsync(
new Set([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]),
).then((array) => console.log(array));
// [1, 2, 3]
Array.fromAsync({
length: 3,
0: Promise.resolve(1),
1: Promise.resolve(2),
2: Promise.resolve(3),
}).then((array) => console.log(array));
// [1, 2, 3]
function wartoscOpozniona(v) {
return new Promise((resolve) => setTimeout(() => resolve(v), 100));
}
Array.fromAsync(
[wartoscOpozniona(1), wartoscOpozniona(2), wartoscOpozniona(3)],
(element) => wartoscOpozniona(element * 2),
).then((array) => console.log(array));
// [2, 4, 6]
function* uczynAsynchronicznaIteracje() {
for (let i = 0; i < 5; i++) {
yield new Promise((resolve) => setTimeout(resolve, 100));
}
}
(async () => {
console.time("Array.fromAsync() czas");
await Array.fromAsync(uczynAsynchronicznaIteracje());
console.timeEnd("Array.fromAsync() czas");
// Array.fromAsync() czas: 503.610ms
console.time("Promise.all() czas");
await Promise.all(uczynAsynchronicznaIteracje());
console.timeEnd("Promise.all() czas");
// Promise.all() czas: 101.728ms
})();
function* generatorZOdrzuconymiObietnicami() {
try {
yield 0;
yield Promise.reject(3);
} finally {
console.log("zadzwonił w końcu");
}
}
(async () => {
const arr = [];
try {
for (const val of generatorZOdrzuconymiObietnicami()) {
arr.push(await val);
}
} catch (e) {
console.log("złapany", e);
}
})();
// zadzwonił w końcu
// złapany 3
Opis:
Metoda Array.fromAsync() statyczna tworzy nową, płytko skopiowaną Array instancję z obiektu asynchronicznego iterowalnego, iterowalnego lub podobnego do tablicy.
Array.fromAsync(arrayLike)
Array.fromAsync(arrayLike, mapFn)
Array.fromAsync(arrayLike, mapFn, thisArg)
Parametr pierwszy obiekt asynchroniczny iterowalny, iterowalny lub podobny do tablicy, który ma zostać przekonwertowany na tablicę. Drugi parametr opcjonalny funkcja wywołująca każdy element tablicy. Jeśli zostanie podany, każda wartość, która ma zostać dodana do tablicy, jest najpierw przekazywana przez tę funkcję, a drugi parametr zamiast tego do tablicy jest dodawana wartość zwracana po oczekiwaniu. Funkcja wywoływana jest z następującymi argumentami: pierwszy argument bieżący element przetwarzany w tablicy. Ponieważ wszystkie elementy są najpierw oczekiwane, ta wartość nigdy nie będzie wtedy możliwa. Drugi argument indeks bieżącego elementu przetwarzanego w tablicy. Trzeci parametr opcjonalny wartość, która ma być używana this podczas wykonywania drugiego parametru. Wartość zwracana nowy Promise, którego wartością realizacji jest nowe Array wystąpienie.
Array.fromAsync()pozwala tworzyć tablice z:
- asynchroniczne obiekty iterowalne (obiekty takie jak ReadableStreami AsyncGenerator); lub, jeśli obiektu nie można iterować asynchronicznie,
- obiekty iterowalne (obiekty takie jak Mapi Set); lub, jeśli obiektu nie można iterować,
- obiekty tablicowe (obiekty z length właściwością i elementami indeksowanymi).
Array.fromAsync()iteruje asynchroniczną iterację w sposób bardzo podobny do for await...of. Array.fromAsync()jest prawie równoważny pod
Array.from()względem zachowania, z wyjątkiem następujących:
- Array.fromAsync()obsługuje asynchroniczne obiekty iterowalne.
- Array.fromAsync()zwraca a Promise, który spełnia, do instancji tablicy.
- Jeśli Array.fromAsync() zostanie wywołane z nieasynchronicznym obiektem iterowalnym, każdy element, który ma zostać dodany do tablicy, jest najpierw oczekiwany await.
- Jeśli drugi parametr podano, a jego dane wejściowe i wyjściowe są wewnętrznie oczekiwane.
Array.fromAsync() i Promise.all() oba mogą zamienić iterowalną obietnicę w obietnicę tablicy. Istnieją jednak dwie kluczowe różnice:
- Array.fromAsync()oczekuje sekwencyjnie na każdą wartość uzyskaną z obiektu. Promise.all()oczekuje na wszystkie wartości jednocześnie.
- Array.fromAsync()iteruje iterowalnie leniwie i nie pobiera następnej wartości, dopóki bieżąca nie zostanie rozliczona. Promise.all()pobiera wszystkie wartości z wyprzedzeniem i czeka na nie wszystkie.
Array.fromAsync() oczekuje sekwencyjnie na każdą wartość uzyskaną z obiektu.
Promise.all() oczekuje na wszystkie wartości jednocześnie.
Linki: