2016-05-25 11 views
0

Ich habe ähnliche Fragen mit verschiedenen Vorschlägen gefunden, aber ich kann es nicht zum Funktionieren bringen. Einige sagen, Sie können es nicht tun und andere geben eine sehr lange Lösung, um es zum Laufen zu bringen. Es wird zurückgegeben und nicht definiert.Wie verwende ich Q-Versprechen mit Unterstreichungsfilter

Dienst

filterSubdivisions: (response) => { 
     var arry = []; 
     let deferred = Q.defer(); 
     arry = _.filter(response, (item) => { 
      if (item.status === 'A') { 
       item.color = 80; 
       item.status = 'Active'; 
       return item 
      } else { 
       item.color = 255; 
       item.status = 'Future'; 
       return item 
      } 
     }); 

     deferred.resolve(arry); 
     return deferred.promise; 
    } 

Service Call

AuthService.get().then((result) => { 
     SubdivisionService.getSubdivisions(result.userId, result.token) 
      .then((response) => { 
       if (response) 
        SubdivisionService.filterSubdivisions(response) 
      }) 
      .then((res) => { 
       if (res) 
       SubdivisionService.loopSubdivisions(res) 
      }) 
      .then((response) => { 
       if (response) 
       StorageService.set('Subdivisions', response) 
      }) 
      .then(() => me.onGoHome()) 
      .catch(error => { 
       AlertService.error('subdivisions') 
        .then((error) => ErrorService.post(error)) 
        .then(() => me.onGoHome()) 
      }) 

    }) 
+0

Was genau versuchen Sie zu tun? 'filterSubdivisions' gibt ein Versprechen zurück, aber Sie fügen niemals einen' .then'-Callback an ihn an. Und du versprichst * dieses Versprechen sofort, also wieso hat man überhaupt erst ein Defered gegeben? Kannst du erklären, was du versuchst und was nicht so funktioniert, wie du es erwartest? –

+0

Ich habe gerade den Code aktualisiert. Und ich kann nicht glauben, dass ich das getan habe! steckte es in eine Antwort – texas697

+0

Also, das Problem war nie ein ".then" an die Zusage von 'filterSubdivisions' zurückgegeben? –

Antwort

1

Ich bin mir nicht sicher, warum Sie haben filterSubdivisions() ein Versprechen der Rückkehr, vor allem, wenn Sie es zu lösen sofort statt jede Art von asynchronen Aktionen zu tun . Wie auch immer, Sie fügen niemals einen Callback zu diesem Versprechen hinzu.

Sie lösen es mit dem gefilterten Array, aber haben nie einen Rückruf, um diese Daten zu erhalten.

+0

Ich bin gewohnt, alle Versprechen winkelig zu handhaben, werde ich ein wenig mehr lesen. Vielen Dank! – texas697