2016-01-13 10 views
6

Ich verwende BrightFutures und wenn ich den folgenden Code ausführen, wird sequence().onComplete und sequence().onSuccess aufgerufen, bevor der geoCoder completionHandler abgeschlossen ist. Kannst du mir bitte helfen, damit das funktioniert?Promise.onSuccess sofort aufgerufen

self.uploadContentSequence = [Future<Future<Void, NoError>, NoError>](); 

for post in posts { 
    self.uploadContentSequence.append(future(self.preparePostUpload(post))) 
} 

self.uploadContentSequence.sequence().onComplete { (_) -> Void in 
    print("onComplete") 
}.onSuccess { (_) -> Void in 
    print("onSuccess") 
}.onFailure { (_) -> Void in 
    print("onFailure") 
} 

[...] 

func preparePostUpload(post: Post) -> Future<Void, NoError> { 
    let promise = Promise<Void, NoError>() 

    [...] 

    let postLocation = CLLocation(latitude: Double(post.lat!), longitude: Double(post.lng!)) 
    let geocoder = CLGeocoder(); 
    let countryCode = NSLocale.currentLocale().objectForKey(NSLocaleCountryCode) as! String 
    post.country = countryCode 
    geocoder.reverseGeocodeLocation(postLocation, completionHandler: { (placemarks, locError) -> Void in 
     [...] 
     promise.success() 
    }); 

    return promise.future 
} 

Antwort