2016-12-08 4 views
0

Das erste $ http.post Versprechen (wenn mit .then verwendet) gibt ein Objekt kein Problem zurück, aber wenn ich ein anderes $ http.post Versprechen verschachtelt (auch mit. dann) Ich kann niemals ein Objekt zurückgeben. Es gibt immer ein Versprechen, egal was ich tue.

function getDocumentPages($http) { 
var data = { fileName: '@fileNameUrlSafe' }; 
return $http.post(controllerBaseUrl + "GetDocumentPages", data) 
.then(function successCallback(response) { 
    // ======================================= 
    // THE LINE BELOW ALWAYS RETURNS A PROMISE 
    // ======================================= 
    var fieldPages = getDocumentFormFields($http); 
    var tempModel = { 
     pages: response.data, 
     fieldPages: fieldPages 
    }; 
    return tempModel; 
    }, function errorCallback(response) { 
    console.log(response); 
}); 
} 

function getDocumentFormFields($http) { 
var data = { fileName: '@fileNameUrlSafe' } 
return $http.post(controllerBaseUrl + "GetDocumentFormFields", data) 
.then(function successCallback(response) { 
    return response.data; 
}, function errorCallback(response) { 
    console.log(response); 
}); 
} 
+0

irgendein Fehler in der Konsole? –

+0

Nein, es gab keine Fehler – RichC

Antwort

1
function getDocumentPages($http) { 
var data = { fileName: '@fileNameUrlSafe' }; 
return $http.post(controllerBaseUrl + "GetDocumentPages", data) 
    .then(function successCallback(response) { 

     // ======================================= 
     // THE LINE BELOW ALWAYS RETURNS A PROMISE 
     // ======================================= 
     return getDocumentFormFields($http).then(function(fieldPages) { 
      var tempModel = { 
      pages: response.data, 
      fieldPages: fieldPages 
      }; 
      return tempModel; 
     }); 

    }, function errorCallback(response) { 
     console.log(response); 
    }); 
} 

Verwendung wie folgt aus:

getDocumentPages($http).then(function(response) { 
    //Do something with the response 
    console.log(response); 
}); 

Diese Arbeit sollte!

+0

Ja - das behoben. Gibt es einen Grund, warum ich es nicht so machen kann, wie ich es versucht habe? Scheint nicht logisch. – RichC

+1

getDocumentFormFields() führt den Async-Aufruf durch und gibt dann das Versprechen sofort zurück. es wartet nicht auf das Versprechen zu lösen und der Block dann vor der Rückkehr zu laufen! Durch das Hinzufügen von * then * zum Funktionsaufruf wird sichergestellt, dass die Zusage aufgelöst wird, bevor der auf die Antwort verweisende Code ausgeführt wird. – sledsworth

Verwandte Themen