2016-05-30 13 views
0

Ich habe eine Funktion, die als Antwort die Antwort von der gapi.client.calendar.events.list Aufruf auf der Google Kalender-API dauert.Variable Probleme mit Google (Kalender) API

Ich versuche, diese Antwort zu durchlaufen, und .push() die Elemente zu einem Array (localEventList). Wenn ich den Wert localEventList unmittelbar nach der for-Schleife überprüfe, werden die Ereignisse darin gespeichert, aber wenn ich es außerhalb der .execute(function(events){... Funktion überprüfe, ist das Array immer noch leer. Ich habe versucht, das Array auf verschiedene Werte zu initialisieren, und das Array bleibt auf dem Wert, auf den es initialisiert wird.

Ich verstehe nicht, warum die Variable nicht mutiert bleibt, da sie im übergreifenden Funktionsaufruf initialisiert wird. Auch bin ich nicht wirklich klar über den Zweck der .execute(... Anruf.

Wenn jemand eines dieser beiden Probleme klären könnte, würde ich dich für immer lieben.

function parseEvents(calEventRequest){ 
var localEventList = new Array(); 

calEventRequest.execute(function(events){ 
    for(i = 0; i < events.items.length; i++){ 
     var item = events.items[i]; 
     var name = item.summary; 
     var start = item.dateTime; 
     localEventList.push(name); 
    }; 
    // If I place a console.log(localEventList) here, the array is populated 
}); 
console.log(localEventList); // But the call here displays an empty array. 
} 
+0

Mögliches Duplikat zu verwenden ist [Wie kann ich die Antwort von einem asynchronen Aufruf zurückkehren?] (Http://stackoverflow.com/questions/14220321/how-do-i-Return-die-Antwort-von-einem-asynchronen Anruf) – Phil

Antwort

0

Die einfache Antwort auf Ihre Frage ist console.log() für die nicht calEventRequest.execute() Funktion warten wird abgeschlossen sein, wenn Sie mit AngularJS oder irgendwelchen anderen js Rahmen arbeiten, können Sie diesen Vorgang mit defer und promise ähnliche Funktionen handhaben denen warte auf den api Anruf und gib die Antwort erst nach dem Ende zurück.

die Lösung für Ihr Problem eine callback Funktion nach dem forloop wie unten

// calling the parseEvents function 
parseEvents(calEventRequest,function(eventList){ 
console.log(eventList); 
//this will print the array after for loop finished 
}) 

function parseEvents(calEventRequest,callback){ 
var localEventList = new Array(); 

calEventRequest.execute(function(events){ 
    for(i = 0; i < events.items.length; i++){ 
     var item = events.items[i]; 
     var name = item.summary; 
     var start = item.dateTime; 
     localEventList.push(name); 
    }; 
    if(callback)callback(localEventList); 
    // If I place a console.log(localEventList) here, the array is populated 
}); 
console.log(localEventList); // But the call here displays an empty array. 
} 
+0

Danke! Es war das Callback-Problem, das mich erwischte. Wenn jemand noch mehr wissen wollte, fand ich diesen Thread hilfreich: [link] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+0

froh zu wissen, dass es dir geholfen hat :) – rashidnk