Асинхронизация для карты в JavaScript - PullRequest
0 голосов
/ 17 февраля 2019

Есть ли способ использовать async.each (или что-то подобное) для экземпляра коллекции Map, чтобы выполнить итерацию по всем парам ключ-значение в коллекции и выполнить что-нибудь, например, вызов foo (key, value, cb)за каждую пару?

1 Ответ

0 голосов
/ 17 февраля 2019

Да, вы можете определить асинхронную функцию для карты и использовать await для каждого значения перед продолжением.Не забудьте использовать Promise.all() в конце, так как asyncMap будет массивом обещаний, которые необходимо разрешить.

function doSomething(arr) {
    var asyncMapArr = arr.map(async item => {
        item = await yourFunction(item);
        return item;
    });

    console.log("Initial array: ", arr);
    console.log("In progress array: ", asyncMapArr);
    Promise.all(asyncMapArr)
    	.then(result => console.log("Updated array: ", result));
}

function yourFunction(value) {
    // you can run your async code here and return a promise in the end
    return new Promise(function(resolve, reject) {
        resolve(value + 1);
    });
}

var arr = [1, 2, 3];

doSomething(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...