Возможно ли асинхронно делать действия с элементами массива?

Каким методом можно выполнять асинхронное выполнение ф-ции, в котором входными данными служат данные из массива(выборка из БД MySQL)? Кроме циклов ничего не приходит в голову. Но это очень невыгодно в плане времени выполнения(потому, что надо отправлять POST запрос к PHP скрипту, а потом данные ответа писать в базу), и записей в БД довольно много 10000+.
  • Вопрос задан
  • 386 просмотров
Решения вопроса 1
@yeti357
Воспользуйтесь промисами или либой типа async. Внезапно js поддерживает фичи функционального программирования. Из массива объектов можно создать массив промисов(или функций), а после запустить параллельное асинхронное выполнение, и получить результат, после того как все промисы/функции в массиве выполнились, Параллельный запуск осуществляется с помощью Promise.all() иди async.parallel()
// псевдо код
var yourArrayFromDB = [здесь массив исходных данных, например то, что вы до этого из бд запросили];
var promiseArray = yourArrayFromDB.map( 
    (elem) => new Rromise( function (resolve, reject) {
                // функция которая обрабатывает что вам нужно асинхронно
                request.get('your.url.com', fuction( err, res) {
                     if (err) reject(err);
                     resolve(res);
                })
            }
        )
);

Promise.all(promiseArray)
    .then((resArray) => { здесь делаете что хотите с массивом результатов асинхронных функций })
    .catch(console.log);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HoHsi
@HoHsi
1) AMQP, и делегирование задач.
2) Запускать дочерние процессы, разбивать массив на чанки и раздавать их сопрограммам.

Первый способ:
Преимущества:
* Неограничен ни чем. Запускаете `воркеров X кол-во ядер`. Докупаете еще машину, ставите на ней ту же программу. И т.д.
* Даже если процесс упал, часть массива не потеряется, а передастся другому воркеру.

Недостатки:
* Нужно время на совершение транзакции (надуманный недостаток, так как транзакция проходим за пару миллисекунд).

Второй способ:
Преимущества:
* Моментальные транзакции (ну или как ответит родительский процесс).

Недостатки:
* Ограничен кол-во CPU.
* Не расшияем
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы