AngularJS: Verkettung http verspricht $ q in einem Dienst

8

Ich habe Probleme, wenn es um $ http Versprechen in angularjs kommt. Ich tue das in meinem Dienst: (die getSomething Funktion sollte zwei Versprechen verbinden)

Die zweite Funktion verwendet eine externe Callback-Funktion!

%Vor%

Wenn ich den Dienst in meinem Controller verwende, gibt er nicht die Datei console.log aus:

%Vor%

bearbeiten: Wenn ich die Callback-Funktion selbst in "compactData" definiere, funktioniert es, aber ich verwende "jsonld.compact" von Ссылка und das funktioniert nicht!

%Vor%

Ich erhalte die console.log Ausgabe in jsonld.compact aber die Lösung funktioniert nicht und ich weiß nicht warum.

funktioniert nur mit $ rootScope. $ apply (deferred.resolve (compacted));

    
Betty St 08.05.2013, 08:29
quelle

4 Antworten

5

Ich verwende Verkettungsversprechen wie folgt:

%Vor%     
Thiago Pereira 15.08.2014 17:29
quelle
1

Chaining verspricht Arbeiten hier: jsfiddle

Wenn in Ihrer Implementierung $http.get oder compactData falsch läuft, wird Ihre console.log(data) nicht aufgerufen.

Sie sollten vielleicht Fehler finden:

%Vor%     
Bastien Caudan 08.05.2013 10:00
quelle
1

Immer wenn Sie einen externen (extern zu AngularJS) Callback verwenden, der in einem neuen Turn / Tick ausgeführt wird, müssen Sie $ apply () für den entsprechenden Bereich aufrufen, nachdem dieser aufgerufen wurde. Dadurch weiß AngularJS, dass es aktualisiert werden muss. Du solltest sichergehen, dass du es nur einmal anrufst - nachdem alle Versprechen gelöst wurden. Abgesehen davon bietet jsonld.js eine Promise / Future-API. Wenn Sie also Versprechungen bereits verwenden, müssen Sie diesen Wrapper-Code nicht oben ausführen. Stattdessen können Sie tun:

%Vor%     
dlongley 28.06.2013 14:57
quelle
0

Ich würde vorschlagen, dass Sie anstelle eines Dienstes eine Fabrik verwenden.

Geben Sie die Funktion einfach ab Werk zurück und verwenden Sie sie in Ihrem Controller

    
Ali Sadiq 09.11.2015 08:54
quelle

Tags und Links