簡體   English   中英

如何使用 ReSwift 組織上傳/下載方法的動作狀態流

[英]How organize action-state flow of upload/download methods using ReSwift

我正在使用 Redux 架構和 ReSwift 框架構建應用程序,大多數應用程序流程由操作 - 減速器 - 狀態流描述。 現在我添加了兩個方法 upload(image: UIImage, fileName: String) 和 download(fileName: String),它們將圖像上傳和下載到 Firebase 存儲。 那么,我如何使用 Redux 流程來描述這些方法呢? 好吧,我知道如何使用中間件運行下載/上傳過程,但是如何在商店訂閱者中獲得下載/上傳的結果?

您可以創建將保存結果或錯誤的操作,如下所示:

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
}

然后在您的completionHandlerdone塊中,您可以使用傳遞給中間件的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
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM