Несколько асинхронных функций, которые зависят друг от друга. Как мне собрать данные, когда все будет готово? [закрыто]Javascript

Форум по Javascript
Ответить
Anonymous
 Несколько асинхронных функций, которые зависят друг от друга. Как мне собрать данные, когда все будет готово? [закрыто]

Сообщение Anonymous »

Моему приложению JavaScript необходимо выполнять несколько вызовов асинхронных служб — иногда один, а иногда несколько раз в массиве, возвращенном последним вызовом — и, прочитав о том, как это сделать, я остановился на такой парадигме, где каждая функция getXXX() возвращает обещание:

Код: Выделить всё

const host = await getHosts();
const ids = await getIDs(host);
ids.forEach((id) => {
const classes = await getClasses(id);
classes.forEach((class) => {
const grades = await getGrades(class);
});
});
который работает, поскольку я вижу, что правильные данные проходят мимо, но теперь я хочу собрать и сохранить эти данные и использовать их после завершения асинхронных процессов.
Я подумал, что правильный способ сделать это (или один из способов) - собрать все обещания в массиве, а затем вызвать Promise.all([]).then(...) для него, а затем продолжить работу с моим приложением, потребляя данные, когда это разрешится. Возможно, что-то вроде этого:

Код: Выделить всё

let promises = [];

const host = await getHosts();
promises.push(host);

const ids = await getIDs(host);
promises.push(ids);

ids.forEach((id) => {
const classes = await getClasses(id);
promises.push(classes);

classes.forEach((class) => {
const grades = await getGrades(class);
promises.push(grades);

});
});

Promises.all(promises).then(data => {
// promises are all complete and all my data has been collected
// although I am not sure what data will contain...
});
Однако это, похоже, не работает — обещания выполняются почти мгновенно, а не после того, как я увижу, что все данные прошли.
Кто-нибудь может указать мне правильное направление, пожалуйста?
Спасибо.
Молли.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... ollect-the
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»