Вызов асинхронной функции внутри асинхронной функции
Написал такую функцию, сделав её асинхронной:
const log = async function (text) {
const withTime = now() + text;
console.log(withTime);
fs.appendFileSync(logFileName, withTime + '\n', function (){});
};
Исполнение функции now() может быть медленным. Также медленна запись в файл. Поэтому саму функцию log сделал асинхронной. Вопрос, нужно ли делать вызов appendFile асинхронным, или лучше вызывать синхронно? Или это не имеет значения?
Ответы (1 шт):
То, что вы сделали функцию асинхронной, не значит, что она стала параллельной. Она всё так же выполняется в том же одном потоке, просто завершится не сразу, а в конце очереди задач.
Соответственно она всё так же тормозит процесс, и смысла от её асинхронности нет.
Чтобы смысл был, нужно каждую тяжёлую функцию внутри сделать параллельной. Не все асинхронные функции параллельные. fs.appendFile или fs.promises.appendFile выполняются параллельно в другом потоке, так что стоит использовать их.
И now() возможно стоит вынести в отдельный поток, если она тяжёлая.
Есть ещё вариант тяжёлые функции дробить на мелкие асинхронные циклы, чтобы между сплошным выполнением были разрывы, в которых смогут выполниться другие задачи, и тем самым можно избежать длительного зависания.