Как правильно использовать библиотеку Swift Google Promises, одно из моих замыканий никогда не вызывается? - PullRequest
0 голосов
/ 26 ноября 2018

Я использую библиотеку Google Promises для Swift , но она никогда не выполняет пройденное закрытие.Я подозреваю, что это может быть связано с вложенными обещаниями, но не может заставить код работать.

internal func flow(){
    loginToFacebook().then {token in
        return self.signIntoFirebase(accessToken: token)
        }.then { token in
            return self.getUserDocumentFromFirebase(userId: token.userId!)
        }.then { token, document in
            if document?.exists == false {
                // ### Notice no return here, is this the issue?
                self.makeFacebookGraphRequest(accessToken: token).then { user in
                    return self.downloadFacebookProfilePictureAsImage(userModel: user)
                }.then { (arg) in
                    let (user, image) = arg
                    // Never completes this function, and the closure that I pass never gets called but the image gets saved
                    return self.saveUserProfilePictureToFirestore(user: user, profileImage: image)
                }.then { user in
                    return self.getProfilePictureUrlFromFirestoreForUser(user: user)
                }.then { user, imageUrl in
                    return self.createNewUserDocumentAsDictionary(user: user, avatarUrl: imageUrl)
                }.then { (arg) in
                    let (user, userDictionary) = arg
                    return self.saveUserDocumentToFirestore(user: user, data: userDictionary)
                }.then {
                    self.performSegue(withIdentifier: "TermsViewController", sender: self)
                }
            } else {
                self.dismiss(animated: true, completion: nil)
            }
        }.catch { error in
            self.log.error(error.localizedDescription)
        }.always {
            //Dependency.dismissHud(self.hud, "Test title", "Test message text", 3)
    }
}

Функция self.saveUserProfilePictureToFirestore (...) получает вызов, изображение сохраняется в firebase, но закрытие никогда не вызывается, и программа, кажется, зависает.

fileprivate func saveUserProfilePictureToFirestore(user: User, profileImage: UIImage) -> Promise<User> {
    self.log.info("->")
    return Promise {fulfill, reject in
        guard let filename = user.uid else {
            reject(ClassError.invalidUserObject)
            return
        }
        guard let profileImageUploadData = UIImageJPEGRepresentation(profileImage, 0.3) else {
            self.log.error("->Guard Failure: Image not instantiated")
            reject(ClassError.couldNotGetImageData)
            return
        }
        let ref = Storage.storage().reference().child("profileImages").child(filename+".jpg")
        ref.putData(profileImageUploadData, metadata: nil) { (nil, err) in
            self.log.info("--->{PutDataClosure}")
            if let error = err {
                self.log.error("->\(error)")
                reject(ClassError.couldNotsaveProfilePictureToFirestore)
            }else{
                fulfill(user)
            }
            self.log.info("<---{PutDataClosure}")
        }
        self.log.info("<-")

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...