-2

我正在使用带有 ReSwift 框架的 Redux 架构构建应用程序,大多数应用程序流程由动作 - 减速器 - 状态流描述。现在我添加了两个方法upload(image: UIImage, fileName: String) 和download(fileName: String),将图像上传和下载到Firebase 存储。那么,我如何使用 Redux 流来描述这些方法呢?好吧,我知道如何使用中间件运行下载/上传过程,但是如何在商店订阅者中获得下载/上传结果?

4

1 回答 1

2

您可以创建将保存结果或错误的操作,如下所示:

struct ImageDownloadStartAction: Action {
    let filename: String
}

struct ImageDownloadSuccessAction: Action {
    let data: Data
}

struct ImageDownloadFailureAction: Action {
    let error: Error
}


struct ImageUploadStartAction: Action {
    let image: UIImage
    let filename: String
}

struct ImageUploadSuccessAction: Action { }

struct ImageUploadFailureAction: Action {
    let error: Error
}

然后在您的completionHandlerordone块中,您可以使用dispatch传递给中间件的函数在主线程(例如,DispatchQueue.main.async)上调度成功/失败操作,并使用减速器中的值或错误。

例如(使用PromiseKit):

let networkMiddleware: Middleware<AppState> = { dispatch, getState in
    return { next in
        return { action in
            next(action)

            switch action {
            case let action as ImageDownloadStartAction:
                networkService.download(filename: action.filename)
                .done { // automatically called on main thread in PromiseKit
                    dispatch(ImageDownloadSuccessAction(data: $0)
                }
                .catch { // automatically called on main thread in PromiseKit
                    dispatch(ImageDownloadFailureAction(error: $0)
                }

            default:
                break
            }
        }
    }
于 2019-04-04T17:57:23.853 回答