1
Ich versuche, PromiseKit zu verwenden, und habe ein wenig Mühe, meinen Kopf darum zu wickeln. Ich habe eine Funktion, diePromiseKit - Zurück verschachteltes Versprechen
func lengthyOperation() -> Promise<TestObject> {
return Promise { fulfil, reject in
dispatch_async(GlobalUserInitiatedQueue) {
do {
let testObject = ...
fulfil(testObject)
} catch {
reject(error)
}
}
}
}
etwas tut, wie habe ich eine andere Funktion, die Ich mag würde dies rufen, und zurückzukehren und eine andere Versprechen
func lengthyOperation2() -> Promise<Test2Object> {
return Promise { fulfil, reject in
let test2Object = ...
if test2Object == nil {
lengthyOperation().then { testObject: TestObject in
let test2Object = doSomethingWithTestObject(testObject)
fulfil(test2Object) //Compiler error here
}.error {
reject(error)
}
} else {
fulfil(test2Object)
}
}
}
ich einen Compiler-Fehler sagen
Cannot convert return expression of type 'Void' (aka '()') to return type 'AnyPromise'
Fragen:
- Benötige ich die Dispatch_async im Versprechen Anruf?
- Wie gehe ich vor, verschachtelte Versprechen wie diese aufzurufen und zurückzugeben?
Dank
Edit: einige der Pseudo-Code korrigieren
Ich glaube nicht, Sie verwenden dispatch_async müssen. Vielleicht 'thenOn' oder' thenInBackground'. http://promisekit.org/dispatch-queues/ – Jon
Jon - Danke. Aber wenn ich es nicht verpasse, sehe ich keine Möglichkeit, eigene Versprechen in einer Hintergrundwarteschlange zu erstellen. – georgemp
Haben Sie die letzten drei Absätze in diesem Link gelesen? 'thenOn' verarbeitet den Hauptthread. 'thenInBackground' löst die Standard-GCD-Warteschlange aus. – Jon