resourcesList.map( async ...
map
последовательно для каждого item
из resourcesList
запускает функцию-обработчик, которая возвращает промис и запускает на выполнение функцию-аргумент промиса, которая в свою очередь выводит "-" и доходя до await page.getResource(e);
встает на "паузу", ожидая результата выполнения запроса page.getResource
, передавая тем самым управление следующей задаче в eventloop, которая в вашем случае является функцией-обработчиком для следующей итерации resourcesList
. Таким образом map
проскакивает все итемы в resourcesList
возвращая массив промисов для Promise.all
(и выведя в консоль кучу "-"). Далее начинают подтягиваться ожидающие выполнения запросы page.getResource
и функции стоящие на паузе размораживаются, выводя в консоль "+". При этом следует понимать что порядок снятия с паузы может не соответствовать порядку следования элементов в resourcesList
, порядок будет зависеть только от момента завершения запросов page.getResource
// так нельзя
aaa()=>{
console.log(111)
}
// а так можно
aaa = ()=>{
console.log(111)
}
// можно еще и так (но это бессмысленно)
()=>{
console.log(222)
}
// и даже так (самовызывающаяся функция, иногда используется для изоляции области видимости ее тела)
(()=>{
console.log(333)
})()
например, для ситуации, когда json в файле это массив с объектами, то дописать можно вполне безболезненно. Например в файле:
[ {...}, {...}, ..., {...} ]
тогда дозапись можно сделать по следующему алгоритму:
1. открываем файл на запись, не забываем выставить по...
2. записываем в файл:
, {...} ]
3. закрываем файл.
PS: очевидно, что такой способ сопряжен с определенными рисками, подходит не для любой структуры данных и не позволяет ничего, кроме как добавить еще одну или несколько записей в конец массива. Но тем не менее это возможно)