2016-04-29 3 views
0

Ich habe den Dienst unten erstellt.Wie kann das Ergebnis der asynchronen Funktion in Firebase in AngularFire zurückgegeben und gespeichert werden

app.factory('userProfileFactory', ['FBDB', 'searchParam', function(FBDB, searchParam) { 
     var personalKey; 
    return { 

     userProfile: function(searchEmail) { 
      var deferred = $q.defer(); 
      var FBref = new Firebase(FBDB).child('items'); 
      var promise = FBref.orderByChild('email') 
       .startAt(searchEmail) 
       .endAt(searchEmail) 
       .on('value', function(snapshot) { 
        var data = snapshot.val(); 
        personalKey = Object.keys(data)[0]; 
        deferred.resolve(personalKey); 
       }); 
      return deferred.promise; 
     } 
    }; 
}]); 

Mein Controller ist wie folgt. Das Problem ist, dass es einen Moment dauert, bis die Ergebnisse zurückgegeben werden. Wenn also die $ save-Funktion außerhalb der Factory-Funktion aufgerufen wird, meldet sie eine 'undefinierte Variable'. Wie kann ich es machen, wenn $ speichern draußen ist?

app.controller('profileCtrl', ['userProfileFactory', 'FBDB', '$firebaseArray', function(userProfileFactory, FBDB, $firebaseArray) { 

var FBref = new Firebase(FBDB).child('items'); 

    userProfileFactory.userProfile().then(function(res){ 
     var personalKey = res; 

     item.personalKey = res; 

     //$firebaseArray(FBref)$save(item); It works here. But moved this from here... 
    }) 

    $firebaseArray(FBref)$save(item); //...to here. It does not work. 

}]); 

Antwort

0

in Ihrem Code die Zeile:

$firebaseArray(FBref)$save(item); 

vor der Entschlossenheit Funktion ausführt:

function(res){ 
    var personalKey = res; 

    item.personalKey = res; 
} 

Die Entschlossenheit Funktion für die userProfileFactory.userProfile wartet() versprechen zu lösen (Daten, die zurückgegeben werden sollen) vor der Ausführung, während die Firebase.save-Zeile dies nicht tut. Sie müssen es wieder in die then (resolve) -Funktion einfügen.

Verwandte Themen