У мене є структура схожа на масив, який розкриває методи асинхронізації. Метод async викликає структури масиву повернення, які, в свою чергу, розкривають більше методів асинхронізації. Я створюю ще один об'єкт JSON для зберігання значень, отриманих з цієї структури, тому мені потрібно бути обережним щодо відстеження посилань у зворотному звороті.
Я зашифрував грубе рішення, але хотів би дізнатися більш ідіоматичне чи чисте рішення.
- Візерунок повинен бути повторюваним для n рівнів гніздування.
- Мені потрібно використовувати promis.all або якусь подібну методику, щоб визначити, коли вирішувати рутинну процедуру.
- Не кожен елемент обов'язково повинен включати виклик асинхронізації. Тож у вкладеному обещанні. Я не можу просто робити завдання для своїх елементів масиву JSON на основі індексу. Тим не менш, мені потрібно використовувати щось на зразок promis.all у вкладеному forEach, щоб переконатися, що всі властивості були виконані до вирішення вкладеного розпорядку.
- Я використовую лінійку з обіцянками синьої пташки, але це не є вимогою
Ось частковий код -
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();
Promise.map
(паралельним) та Promise.each
(послідовним) у цьому випадку, також примітка Promise.defer
застаріла - код у моїй відповіді показує, як цього уникнути, повертаючи обіцянки. Обіцянки стосуються повернених значень.