[Solved] Second If statement gets called before first statement finished in one function

[ad_1]

Asynchronous methods! You have to wait for the completion before you move on to the next step.

Put the second block within the first completion handler – like this

func pictureFromFirebase(loginMethod: Int)
{
    if loginMethod == 0 //FB
    {
        var profilePic = FBSDKGraphRequest(graphPath: "me/picture", parameters: ["height":300, "width":300, "redirect":false], httpMethod: "GET")
        let profilePicRef = storageRef.child((user?.uid)!+"/profile_pic.jpg")
        profilePicRef.data(withMaxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                // Uh-oh, an error occurred!
                // but we don't need to do anything yet.  Try to download the profile pic
            }
            if (data != nil)
            {
                print("no need to download image from facebook")
                self.profileImage.image = UIImage (data: data!)
            }
            else
            {
                // THIS IS THE BLOCK THAT HAS BEEN MOVED
                // WHICH WILL NOW BE EXECUTED IN TWO CONDITIONS - 
                // 1. AN ERROR IN THE DOWNLOAD
                // 2. NO PROFILE PIC AVAILABLE
                print("downloading image from facebook")
                profilePic?.start(completionHandler: {(_ connection, _ result, _ error) -> Void in
                    if (error == nil)
                    {
                        if let dictionary = result as? [String:Any], let data = dictionary["data"] as? [String:Any],
                            let urlPic = data["url"] as? String {
                            if let imageData = NSData(contentsOf: NSURL(string: urlPic)! as URL)
                            {
                                let uploadTask = profilePicRef.put(imageData as Data, metadata: nil){
                                    metadata, error in
                                    if (error == nil)
                                    {
                                        let downloadUrl = metadata!.downloadURL
                                    }
                                    else
                                    {
                                        print("error in downloading image")
                                    }
                                }
                                self.profileImage.image = UIImage(data: imageData as Data)
                            }
                        }

                    }
                })
            }

        }
    }
}

8

[ad_2]

solved Second If statement gets called before first statement finished in one function