У меня есть объект массива. Я хочу перебрать массив и диспетчеризировать действие. К сожалению, не дожидаясь, пока первый объект завершит диспетчеризацию, 2-й объект начинает диспетчеризировать действие, как и 3-й, 4-й, 5-й .. объекты.
В настоящее время я выполняю функцию updateCategory, чтобы пользователь мог загрузить изображение, а затем обновить категорию. Пользователь может перетаскивать много изображений и назначать изображениям различные теги. Я храню изображения и теги в объекте массива. Моя концепция такова: из объекта массива загрузить изображение, а затем немедленно обновить категорию загруженным изображением и его тегом, один за другим.
Вот проблема. Я извлекаю api для загрузки изображения и обновляю api категории из итераций массива, используя Promise. Не дожидаясь обновления состояния избыточности, он немедленно получает api загружаемого изображения. И наконец, обновленная категория - это всегда последнее изображение и последний тег в массиве.
Это мой код:
function uploadAndUpdateSubcategoryMedias(Image, ArticleCategoryId, ArticleSubcategoryTag) {
return (dispatch, getState) => {
return dispatch(uploadSubcategoryMedia(Image)).then(() => {
const uploadedImg = getState().media.media.Data;
var MediaFiles = [];
MediaFiles.push(uploadedImg);
return dispatch(updateArticleSubcategoryMedias(ArticleCategoryId, ArticleSubcategoryTag, MediaFiles))
})
}
}
function subcatMediaTesting(subcategoryMediasArr) {
return async (dispatch) => {
var promises = [];
subcategoryMediasArr.forEach((item) => {
var response = dispatch(uploadAndUpdateSubcategoryMedias(item.image, item.articleCategoryId, item.tagName));
promises.push(response);
})
return Promise.all(await promises)
}
}
Как я могу выполнить итерацию объекта массива так, чтобы он отправил upload_Media_Request
-> upload_Media_Success
-> update_Category_Request
-> update_Category_Success
, затем следующий элемент снова запустил этот процесс? Или, может быть, есть другой способ выполнить это, чтобы я мог обновить все категории, а не только категорию последнего элемента?
Спасибо за помощь!