2016-05-04 24 views
1

Ich bin neu zu versprechen, aber ich versuche, eine Funktion (die eine Zahl zurückgibt) auszuführen, bevor Sie fortfahren. Ich habe die folgende und keine Arbeit versucht:Warten Sie, bis die Funktion ausgeführt wird, bevor Sie fortfahren

var whatNumber = function(){ 
var defer = $q.defer(); 
myNumber.get().then(defer.resolve); 
return defer.promise; 
} 

ich auch versucht:

var whatNumber = function(){ 
var defer = $q.defer(); 
defer.resolve(myNumber.get()); 
return defer.promise; 
} 

Und schließlich habe ich versucht, es ohne Versprechen:

var whatNumber = function(){ 
myNumber.get().then(function(result) { 
    return result; 
}); 
} 

Wer irgendwelche Ideen, was ich tue falsch?

+1

Sie haben uns die Funktion selbst gezeigt, uns nicht zeigen, wie Sie es verwenden, und beschreiben, was nicht genau funktioniert (Erwartete vs . Tatsächliches Ergebnis) –

+0

myNumber.get() funktioniert gut, gibt eine Zahl zurück. Das erste trifft die Funktion und läuft durch, aber der Code stoppt - er trifft nie defer.resolve oder das Versprechen Der zweite wartet nicht auf myNumber.get() auszuführen, bevor er das Versprechen eingeht Der dritte schlägt nie zurück Ergebnis ... läuft nur durch die Funktion und stoppt – lk1234

+0

Ich denke, das Problem könnte in der Implementierung von 'myNumber.get()' sein. Kannst du uns zeigen, was dort vor sich geht? Was wird von 'console.log (myNumber.get()) 'protokolliert? – Thomas

Antwort

2

Sie sind in der Nähe, Sie haben nur Ihre Entschlossenheit falsch ausgerichtet von dem, was ich sehen kann. Sie müssen den Wert, den Sie über die Verwendung (den Daten) planen lösen

var whatNumber = function(){ 
var defer = $q.defer(); 
myNumber.get().then(function(response){ 
    defer.resolve(response.data) 
}); 
return defer.promise; 
} 
3

Sie sollten über deffered antipattern In Ihrem Fall lesen können Sie einfach return myNumber.get(); aus der Funktion:

var whatNumber = function(){ 
return myNumber.get(); 
} 

Oder, wenn Sie bestimmte Eigenschaft aus dem Ergebnis zurückgeben müssen:

var whatNumber = function(){ 
return myNumber.get().then(function(result) { 
    return result.data; 
}); 
} 

Wenn Sie möchten, Um die antipattern-Methode zu verwenden (die Sie vermeiden sollten), müssen Sie die Verheißung auflösen und die Parameter übergeben:

var whatNumber = function(){ 
var defer = $q.defer(); 
myNumber.get().then(function(result) { 
    defer.resolve(result); 
}); 
return defer.promise; 
} 

whatNumber().then(function(result) { 
    console.log(result); 
}); 
Verwandte Themen