如何使用 ReSwift 组织 upload/download 方法的动作状态流
How organize action-state flow of upload/download methods using ReSwift
我正在使用带有 ReSwift 框架的 Redux 架构构建应用程序,大多数应用程序进程由操作 - 减速器 - 状态流描述。
现在我添加了两个方法 upload(image: UIImage, fileName: String) 和 download(fileName: String),用于将图像上传和下载到 Firebase 存储。
那么,我如何使用 Redux 流程来描述这些方法呢?
好吧,我知道如何使用中间件 运行 downloading/uploading 进行处理,但是如何在商店订阅者中获得 download/upload 的结果?
您可以创建将保存结果或错误的操作,如下所示:
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
}
然后在你的 completionHandler
或 done
块中,你可以使用传递给中间件的 dispatch
函数在主线程上调度 success/failure 操作(对于例如,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: [=11=])
}
.catch { // automatically called on main thread in PromiseKit
dispatch(ImageDownloadFailureAction(error: [=11=])
}
default:
break
}
}
}
我正在使用带有 ReSwift 框架的 Redux 架构构建应用程序,大多数应用程序进程由操作 - 减速器 - 状态流描述。 现在我添加了两个方法 upload(image: UIImage, fileName: String) 和 download(fileName: String),用于将图像上传和下载到 Firebase 存储。 那么,我如何使用 Redux 流程来描述这些方法呢? 好吧,我知道如何使用中间件 运行 downloading/uploading 进行处理,但是如何在商店订阅者中获得 download/upload 的结果?
您可以创建将保存结果或错误的操作,如下所示:
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
}
然后在你的 completionHandler
或 done
块中,你可以使用传递给中间件的 dispatch
函数在主线程上调度 success/failure 操作(对于例如,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: [=11=])
}
.catch { // automatically called on main thread in PromiseKit
dispatch(ImageDownloadFailureAction(error: [=11=])
}
default:
break
}
}
}