2016-10-04 8 views
0

Wie rufe ich diese Antwort in einer anderen Funktion auf? Das ist mein CodeAufruf einer Funktionsantwort in einer anderen Funktion (Javascript)

function queryCoreReportingApi(profileId) { 
     // Query the Core Reporting API for the number sessions for 
     // the past seven days. 
     gapi.client.analytics.data.ga.get({ 
     'ids': 'ga:' + profileId, 
     'start-date': '7daysAgo', 
     'end-date': 'yesterday', 
     'metrics': 'ga:pageviews', 
     'dimensions' : 'ga:date' 
     }) 
     .then(function(response) { 
     console.log(response);  
     }) 
     .then(null, function(err) { 
      // Log any errors. 
      console.log(err); 
     }); 
} 

Ich möchte die Antwort dieser Funktion an eine andere Funktion übergeben.

Zum Beispiel:

$scope.sample = function(){ 
    //call the response of function queryCoreReportingApi 
}; 
+0

die „andere Funktion“ ist diese Funktion aufrufen, oder ist diese Funktion die „andere Funktion“ Aufruf -. Es aus Ihrer Frage nicht klar ist, –

+0

'myFunction (Antwort); ' – Tushar

+2

Mögliches Duplikat von [" Wie gebe ich die Antwort von einem asynchronen Anruf zurück? "] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchroner Anruf) – nnnnnn

Antwort

0

Der Kontext ist nicht ganz klar, aus Ihrer Frage, aber ich werde auf jeden Fall es einen Riss nehmen.

Erstens, bevor Sie Ihre Frage beantworten, habe ich Bedenken über die Art, wie Ihr Code oben gebildet wird - insbesondere die beiden Blöcke, die Sie verkettet haben. Obwohl ich die spezifische API, die Sie verwenden, nicht kenne, erlauben die APIs des Promise-Typs den Methoden , zwei Argumente zu übergeben - der erste, der aufgerufen wird, wenn das Versprechen erfolgreich ist, und der zweite, der in der aufgerufen wird Fall eines Fehlers. So bin ich zu ahnen, dass vielleicht das, was Sie gemeint war zu geben:

function queryCoreReportingApi(profileId) { 
     // Query the Core Reporting API for the number sessions for 
     // the past seven days. 
     gapi.client.analytics.data.ga.get({ 
     'ids': 'ga:' + profileId, 
     'start-date': '7daysAgo', 
     'end-date': 'yesterday', 
     'metrics': 'ga:pageviews', 
     'dimensions' : 'ga:date' 
     }) 
     .then(function(response) { 
     console.log(response);  
     }, 
     function(err) { 
      // Log any errors. 
      console.log(err); 
     }); 
} 

Dies ist nur eine Vermutung, aber ich denke, Sie sollten das überprüfen.

Jetzt in Bezug auf die Frage, die Sie gefragt haben-- wenn ich einige wichtige Informationen nicht vermisse, sollten Sie in der Lage sein, auf jede verfügbare Methode im gleichen Umfang (oder höher) wie die queryCoreReportingApi Methode zuzugreifen und ihm die Antwort von der Erfolgsmethode Ihrer .then. Zum Beispiel:

function myCustomFunction(data) { 
    //do some stuff with the data 
} 

function queryCoreReportingApi(profileId) { 
     // Query the Core Reporting API for the number sessions for 
     // the past seven days. 
     gapi.client.analytics.data.ga.get({ 
     'ids': 'ga:' + profileId, 
     'start-date': '7daysAgo', 
     'end-date': 'yesterday', 
     'metrics': 'ga:pageviews', 
     'dimensions' : 'ga:date' 
     }) 
     .then(function(response) { 
     console.log(response); 
     myCustomFunction(response);  
     }, 
     function(err) { 
      // Log any errors. 
      console.log(err); 
     }); 
} 

Beantwortet das Ihre Frage? Falls nicht, geben Sie bitte weitere Einzelheiten zu den Einzelheiten Ihrer Anfrage an.

EDIT: Ich sehe von Ihrem Edit oben, dass es aussieht wie Sie Angular verwenden. In diesem Fall nehme ich auch an, dass die eingefügte Methode in einem Service enthalten ist, der vom Controller aufgerufen wird. Wenn das der Fall ist, können Sie Ihre queryCoreReportingApi Methode erweitern, um eine Callback-Methode als zweites Argument zu akzeptieren, im Fall eines Erfolgs aufgerufen werden, etwa so:

// in your controller 
$scope.sample = function (data) { 
    // manipulate the returned data 
} 
// call the service 
myReportingService.queryCoreReportingApi(profileId, $scope.sample); 

Und dann später, in Ihren Diensten:

//in your service 
function queryCoreReportingApi(profileId, callback) { 
     // Query the Core Reporting API for the number sessions for 
     // the past seven days. 
     gapi.client.analytics.data.ga.get({ 
     'ids': 'ga:' + profileId, 
     'start-date': '7daysAgo', 
     'end-date': 'yesterday', 
     'metrics': 'ga:pageviews', 
     'dimensions' : 'ga:date' 
     }) 
     .then(function(response) { 
     console.log(response); 
     callback(response);  
     }, 
     function(err) { 
      // Log any errors. 
      console.log(err); 
     }); 
} 

(ich sehe auch, dass Sie auf „Aufruf“ die Antwort des Erfolgs beziehen. Diese Art legt nahe, von, dass die Antwort selbst eine Methode, die Sie anrufen wollen. ich denke, das ist nur ein Tippfehlern auf Ihr Teil, aber wenn das der Fall ist, ist es so einfach, es einfach zu rufen, wenn Sie es erhalten, so:

.then(function(response) { 
    response(); 
}); 

Aber ich bezweifle, das ist, was Sie gemeint)

+0

im sorry für meine Frage nicht klar. zum Beispiel habe ich diesen Code. $ scope.sample = function() { // rufe die Antwort der Funktion queryCoreReportingApi } auf; – AyDee

+0

myReportingService ist nicht definiert – AyDee

+0

Die angeketteten '.then()' Aufrufe im ursprünglichen Code sollten für ES6-Versprechen (und andere ähnliche Implementierungen) in Ordnung sein. – nnnnnn

Verwandte Themen