PromiseKit - передать предыдущий результат следующему обещанию в цепочке - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь следовать Документации, чтобы передать результат обещания следующему обещанию

https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md#saving -previous-results

Я продолжаю получать
Contextual closure type '(_) throws -> _' expects 1 argument, but 2 were used in closure body

Вот мой код

 class func loginInOrSignup() -> Promise<PFUser> {
        let lm = LoginManager()
        lm.logOut()

        return logInInBackground().then{user in
                if user.isNew{
                    return getUserInfo().map{ ($0, user) }
                }
                else{
                    user.fetchIfNeededInBackground()
                    return Promise.value(user)
                }
            }.then{(userInfo, user) -> Promise<PFUser> in

                let name = userInfo["name"] as! String
                if let email = userInfo["email"] as? String {
                    user.email = email
                }
                let username = G8FacebookLogin.generateSuggestedUsername(name: name)
                user.username = username

                return Promise.value(user)
            }
    }

    private class func logInInBackground() -> Promise<PFUser>{
        return Promise {seal in
            PFFacebookUtils.logInInBackground(withReadPermissions: ["public_profile", "email"]){user, error in
                guard let user = user else {
                    seal.reject(error ?? AuthError.msg(reason: "Some FB Error"))
                    return
                }
                seal.fulfill(user)
            }
        }
    }
    private class func getUserInfo() -> Promise<Dictionary<String,Any>> {
        return Promise {seal in
            G8FacebookLogin.getUserInfo { (userDict, error) in
                guard let userInfo = userDict else{
                    PFUser.logOut()
                    seal.reject(AuthError.loginFailed(reason: "no user Info retrieved"))
                    return
                }
                seal.fulfill(userInfo)
            }
        }
    }

enter image description here

Это почти то же самое, что и фрагмент кода в документации. Я не понимаю, как правильно это сделать.

...