У меня есть массив, похожий на структуру, которая предоставляет методы async. Метод async вызывает обратные структуры массивов, которые, в свою очередь, выставляют больше асинхронных методов. Я создаю еще один объект JSON для хранения значений, полученных из этой структуры, и поэтому мне нужно быть осторожным в отслеживании ссылок в обратных вызовах.
Я закодировал решение грубой силы, но я хотел бы узнать более идиоматическое или чистое решение.
- Шаблон должен повторяться для n уровней вложенности.
- Мне нужно использовать prom.all или какой-либо подобный метод, чтобы определить, когда нужно разрешить прилагаемую процедуру.
- Не каждый элемент обязательно будет включать асинхронный вызов. Таким образом, вложенное обещание. Я не могу просто назначать свои элементы массива JSON на основе индекса. Тем не менее, мне нужно использовать что-то вроде prom.all во вложенном forEach, чтобы гарантировать, что все назначения свойств были сделаны до разрешения прилагаемой процедуры.
- Я использую обещание vibbbbb, но это не является обязательным требованием
Вот некоторый частичный код -
var jsonItems = [];
items.forEach(function(item){
var jsonItem = {};
jsonItem.name = item.name;
item.getThings().then(function(things){
// or Promise.all(allItemGetThingCalls, function(things){
things.forEach(function(thing, index){
jsonItems[index].thingName = thing.name;
if(thing.type === 'file'){
thing.getFile().then(function(file){ //or promise.all?
jsonItems[index].filesize = file.getSize();