Вызов асинхронной функции внутри асинхронной функции

Написал такую функцию, сделав её асинхронной:

const log = async function (text) {
    const withTime = now() + text;
    console.log(withTime);
    fs.appendFileSync(logFileName, withTime + '\n', function (){});
};

Исполнение функции now() может быть медленным. Также медленна запись в файл. Поэтому саму функцию log сделал асинхронной. Вопрос, нужно ли делать вызов appendFile асинхронным, или лучше вызывать синхронно? Или это не имеет значения?


Ответы (1 шт):

Автор решения: Pavel Grishaev

То, что вы сделали функцию асинхронной, не значит, что она стала параллельной. Она всё так же выполняется в том же одном потоке, просто завершится не сразу, а в конце очереди задач.

Соответственно она всё так же тормозит процесс, и смысла от её асинхронности нет.

Чтобы смысл был, нужно каждую тяжёлую функцию внутри сделать параллельной. Не все асинхронные функции параллельные. fs.appendFile или fs.promises.appendFile выполняются параллельно в другом потоке, так что стоит использовать их.

И now() возможно стоит вынести в отдельный поток, если она тяжёлая.

Есть ещё вариант тяжёлые функции дробить на мелкие асинхронные циклы, чтобы между сплошным выполнением были разрывы, в которых смогут выполниться другие задачи, и тем самым можно избежать длительного зависания.

→ Ссылка