Предположим, вам нужно выполнить некоторые операции, зависящие от некоторого временного файла. поскольку мы говорим о Node здесь, эти операции, очевидно, асинхронны. Какой идиоматический способ дождаться завершения всех операций, чтобы знаете, когда временный файл можно удалить?
Вот какой код показывает, что я хочу сделать:
do_something(tmp_file_name, function(err) {});
do_something_other(tmp_file_name, function(err) {});
fs.unlink(tmp_file_name);
Но если я напишу его таким образом, третий вызов может быть выполнен до первых двух получите возможность использовать файл. Мне нужно каким-то образом гарантировать, что первые два звонки уже завершены (вызывается их обратные вызовы), прежде чем перемещаться без вложенности (и делает их синхронными на практике).
Я думал об использовании излучателей событий в обратных вызовах и регистрации счетчика как приемник. Счетчик получит готовые события и подсчитает, сколько операции продолжались. Когда последний закончен, он удалит файл. Но есть риск состояния гонки, и я не уверен, что это обычно, как это делается.
Как люди Node решают эту проблему?