2016-04-21 10 views
-4
"use strict"; 

var Tabletop = require("tabletop"); 
var base64 = require('base-64'); 


Tabletop.init({ key: 'xxxxxg46hgfjd', 
        callback: showInfo, 
        simpleSheet: true }) 

function showInfo(data, tabletop) { 
     console.log(data); 
     console.log(base64.encode(data)); 
} 

var vGlobals = { 
    dataString: base64.encode(data) 
}; 

module.exports = vGlobals; 

Wie kann ich auf die Datenvariable von showInfo zugreifen, um sie in vGlobals zu verwenden? Es sagt, dass es nicht definiert wurde.Variablenpräzedenz (global in Knoten js?)

+0

können Sie ein Beispiel hinzufügen, wie Sie es bitte verwenden möchten? Versteh nicht was du hier anstellst. Danke – jaumard

+0

Die Showinfo macht es zu einem JSON-Typ der Datei. Ich möchte es in Base 64 codieren. Die Variablen in showInfo unterscheiden sich jedoch von den variablen Daten in vGlobals. –

Antwort

0

Ihr Ansatz ist falsch, Sie können dies nicht tun, da TableTop Ihren Callback asynchron aufruft.

Mein Vorschlag (a quick one):

var dataString = null; 
    module.exports = function(cb) { 
     if (dataString == null) 
      Tabletop.init({ 
       key: 'xxxxxg46hgfjd', 
       callback: function(data, tabletop) { 
        dataString = base64.encode(data); 
        cb(dataString); 
       }, 
       simpleSheet: true 
      }); 
     else cb(dataString); 
    }; 

und die Daten zu erhalten:

var dataManager = require('./myfile'); 
dataManager(function(dataString) { 
    //here is your data do what you want with it 
}) 

Sie sollten mehr über Knoten/javascript und asynchrone/ereignisgesteuerte Programmierung aussehen/lernen.

+0

Problem ist, wenn ich dieses Modul verwende, wird dataString immer noch als null behandelt und nicht als base64.encode (Daten) wie in der Funktion ausgeführt. :( –

+0

Wann haben Sie die showInfo aufgerufen? Weil auf Ihrem Beispiel Sie nicht so dataString ist immer Null – jaumard

+0

Ich lege showInfo(); direkt vor module.exports. –