获取API并等待状态以在数组中更新

时间:2019-03-21 03:51:56

标签: javascript reactjs redux redux-thunk

我有一个数组对象。我想遍历数组并调度动作。不幸的是,没有等待第一个对象完成调度,第二个对象开始调度动作,第三个,第四个,第五个对象也是如此。

我当前正在执行updateCategory函数,以便用户上传图片,然后更新类别。用户可以拖放许多图像,并为图像赋予不同的标签。我将图像和标签保留在数组对象中。我的概念是这样的,从数组对象中上传图像,然后立即使用上传的图像及其标签逐一更新类别。

这是问题所在。我使用Promise从迭代数组中获取上传图像api和更新类别api。在不等待redux状态更新的同时,它会立即获取上传图片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,然后下一项再次开始此过程?或者,也许还有另一种方法可以完成此操作,以便我可以更新所有类别,而不仅是最后一项的类别?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

请记住,dispatch()返回一个Promise。您可以在提取调用中执行此操作:dispatch(...)。then(...)。我会尝试dispatch(FIRST_ACTION).then(...在这里放取调用...)。