2017-12-22 10 views
0

Ich versuche, das Array namens 'sheetsArray' aus dem unten stehenden Code zu übergeben, damit ich es für einige Aufgaben verwenden kann. Ich kann nicht für das Leben von mir herausfinden, wie man das macht, obwohl ich viele Dinge probiert und stundenlang gegoogelt habe. Ich bin sicher, es ist einfach, aber ich bin mir nicht einmal sicher, was ich suchen sollte, dass ich nicht bin.Wie man das Array zurückgibt

var sheetsArrayOut = sheets.spreadsheets.get({ 
    auth: googleauth, 
    spreadsheetId: outputDOCID, 
}, function(err,response) { 
    if (err) { 
    console.log('ERROR:' + err); 
    return 
    } 
    var sheets = response.sheets; 

    if (sheets.length == 0) { 
    console.log('No data found.'); 
    } else { 
     var sheetsArray = []; 
     for (i = 0; i < sheets.length; i++) { 
     sheetsArray.push(sheets[i].properties.title); 
     } 
    } 
    console.log(sheetsArray[4]); // this returns the sheet name 
    return sheetsArray; 
}); 

console.log(sheetsArrayOut[4]); // this returns undefined 

Antwort

1

Es gibt undefined, weil ich die Funktion asynchron vermuten. In diesem Fall können Sie wahrscheinlich einen Callback mit gutem Effekt verwenden:

function getData(function (sheetsArray) { 
    // do things with sheetsArray 
}); 

function getData(callback) { 
    sheets.spreadsheets.get({ 
    auth: googleauth, 
    spreadsheetId: outputDOCID, 
    }, function(err,response) { 
    // do a bunch of things 
    callback(sheetsArray); 
    }); 
} 
+0

Vielen Dank für Ihre Hilfe! Das hat perfekt funktioniert. Ich bin ziemlich neu bei der Verwendung von JavaScript für mehr als Event-Handler auf Webseiten, und ich war noch nicht vertraut mit dem Konzept des asynchronen Codes. Ich schätze es sehr, dass Sie sich die Zeit genommen haben, mir eine Richtung zu geben. –

+0

https://stackoverflow.com/q/14220321/1377002 – Andy

1

Die erste = in var = sheetsArrayOut = sheets.spreadsheets.get(...) ist ungültige Syntax.

Verwenden Sie stattdessen var sheetsArrayOut = sheets.spreadsheets.get(...).

+0

Ich bin mir nicht sicher, wie das passiert ist, aber das war nicht die Quelle meines Problems. –

+0

Die vorgeschlagene Lösung @ Acika00Mk funktioniert nicht, weil die Ergebnisfunktion 'tablethew.get (..)' über das Versprechen aufgerufen wird. Direktes Anmelden an der Konsole nach dem Aufruf druckt die (noch nicht) zugewiesene Variable 'sheetsArrayOut 'als noch nicht definiert. –

+0

zu überprüfen, ob dies das Problem ist, statt Konsole.log (..) geben Sie js einige Zeit und verwenden Sie setTimeout (function() {console.log (..);}, 1000); –

0

Warum zuweisen Sie nicht nur den Wert am Ende des Antrags

var sheetsArrayOut; 
sheets.spreadsheets.get({ 
    auth: googleauth, 
    spreadsheetId: outputDOCID, 
    }, function(err,response) { 
     //your functional code 
     sheetsArrayOut = sheetsArray; 
}); 
+0

Ich habe das versucht, aber es gibt immer noch undefined aus. –

+0

Ja, weil das get-Ereignis nicht beendet ist. Eine Perspektive besteht darin, eine Funktion am Ende der Anfrage aufzurufen und Ihre Daten zu ändern. Die zweite ist Async/erwarten Module in Knoten – Acika00mk

Verwandte Themen