Как организовать поток действий / состояний загрузки / выгрузки с помощью ReSwift - PullRequest
0 голосов
/ 10 марта 2019

Я создаю приложение, используя архитектуру Redux с каркасом ReSwift, большинство процессов приложений описываются потоком действий - редукторов - состояний.Теперь я добавил два метода upload (image: UIImage, fileName: String) и download (fileName: String), которые загружают и загружают изображения в хранилище Firebase.Итак, как я могу описать эти методы, используя поток Redux?Ну, я знаю, как я могу запускать процессы загрузки / выгрузки с использованием промежуточного программного обеспечения, но как я могу получить результаты загрузки / выгрузки в подписчиках магазина?

1 Ответ

2 голосов
/ 04 апреля 2019

Вы можете создать действия, которые будут содержать результаты или ошибку, например:

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, переданную впромежуточное ПО для отправки действия об успешном / неудачном выполнении в главном потоке (например, 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
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...