Проблема не в переменной области, а в том, что async.queue не знает обо всех асинхронных функциях, которые вы планируете.В частности, он не знает о вызовах item.save () - он знает только о внешней функции, которую планирует item.save ().Фактическое сохранение и результирующий вызов обратного вызова выполняются асинхронно, после того как вызвана dump (), поэтому itemIds выглядит пустым.(Имеет смысл?)
Чтобы решить эту проблему, я бы предложил вам использовать Step module вместо async
.В частности, обратите внимание на функцию шага group()
, которая позволяет указать, когда вложенные асинхронные потоки управления, подобные этому, закончились.