2016-10-13 6 views
0

Ich möchte einige Daten beim Start meiner App asynchron laden und die geladenen Daten von einem View Controller verwenden, der später im Fluss der Apps dargestellt wird.Warten auf Rückgabeversprechen

Wie kann ich feststellen, ob die Daten geladen wurden und, wenn nicht, wie warte ich darauf, dass sie geladen wird?

Also wenn in AppDelegate der Code ist ... _ = service.LoadData() und dies gibt ein Versprechen, wie würde der View-Controller wissen, ob das Versprechen zurückgegeben wurde oder nicht?

Einen neuen .then Aufruf am Ende des Versprechens hinzufügen würde sicherlich nicht funktionieren, wenn das Versprechen bereits zurückgegeben wurde.

+0

können wir 'completionHandlers' nicht erstellen, d. H.' Closures' –

+0

Ja, aber Sie wissen nicht, ob die Aufgabe abgeschlossen wurde oder nicht. Wenn der Vorgang abgeschlossen ist, wird kein Beendigungsabschluss aufgerufen. –

+0

Ich denke, der einzige Weg, Ihren 'ViewController' zu informieren, ist, einen Beobachter in Ihrem' ViewController' hinzuzufügen und eine Benachrichtigung auszulösen, sobald das Versprechen eintrifft. Verwenden Sie das 'NSNotificationCenter' –

Antwort

0

Das Aufrufen von .then auf einer aufgelösten Zusage scheint dazu zu führen, dass der Abschluss sofort aufgerufen wird. Also speichere ich einfach das Versprechen aus der ersten Abfrage und füge dann immer ein neues .then hinzu. Wenn die Daten geladen sind, werden sie sofort zurückgegeben, andernfalls wird sie hoffentlich warten.