Как запустить две асинхронные функции паралельно?

В Node.js, чтобы запустить две асинхронные функции параллельно, существует несколько способов. Обсудим два наиболее распространенных подхода: использование коллбэков и использование промисов.

1. Использование коллбэков:
Для работы с коллбэками, вы можете использовать функцию async.parallel() из пакета async. Пакет async предоставляет множество удобных функций для работы с асинхронным кодом.

Вот пример кода, показывающий, как запустить две асинхронные функции параллельно с использованием коллбэков:

const async = require('async');

async.parallel([
    function(callback) {
        // Ваш код первой асинхронной функции
        callback(null, result1); // передача результата первой функции через callback
    },
    function(callback) {
        // Ваш код второй асинхронной функции
        callback(null, result2); // передача результата второй функции через callback
    }
], function(err, results) {
    // В этой функции обработки результата,
    // вы можете получить значения, возвращенные из обоих асинхронных функций
    if (err) {
        console.error(err);
    } else {
        console.log(results); // [result1, result2]
    }
});

В этом примере async.parallel() принимает массив функций, которые нужно запустить параллельно. Каждая функция принимает коллбэк, который будет вызван после завершения этой функции. Результирующие значения всех функций будут переданы в финальный коллбэк в виде массива.

2. Использование промисов:
Если вы предпочитаете работать с промисами, то в Node.js есть встроенный модуль util.promisify, который позволяет преобразовать функцию, использующую коллбэки, в функцию, возвращающую промисы.

Вот пример кода, показывающий, как запустить две асинхронные функции параллельно с использованием промисов:

const util = require('util');

// Преобразование функций с коллбэками в функции, возвращающие промисы
const firstAsyncFunction = util.promisify(firstAsyncFunctionCallback);
const secondAsyncFunction = util.promisify(secondAsyncFunctionCallback);

// Запуск двух асинхронных функций параллельно
Promise.all([firstAsyncFunction(), secondAsyncFunction()])
    .then(results => {
        console.log(results); // [result1, result2]
    })
    .catch(err => {
        console.error(err);
    });

В этом примере мы используем метод util.promisify() для преобразования асинхронных функций с коллбэками в функции, возвращающие промисы. Затем мы используем Promise.all() для запуска этих функций параллельно и получения результатов.

Оба подхода - использование коллбэков и использование промисов - позволяют запускать функции параллельно и обрабатывать результаты после их завершения. Выбор подхода зависит от ваших предпочтений и требований вашего проекта.