2016-08-21 3 views
0

Ich habe eine NodeJS app, wo ich bin ExcelJS in eine der Strecken (angetrieben durch Express) verwendet wird. Im folgenden Codeausschnitt soll eine einfache Schleife Zeilen aus der Excel-Datei lesen und sie dann in das Array einfügen. Sie scheinen jedoch nicht einzufügen.Werte werden nicht in ein Feld eingefügt zu werden

router.get('/work', function(req, res, next) { 
    var posts = []; 
    var workbook = new Excel.Workbook(); 
    workbook.xlsx.readFile(file).then(function() { 
     var worksheet = workbook.getWorksheet(1); 
     worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { 
      console.log(JSON.stringify(row.values)); 
      posts.push(JSON.stringify(row.values)); 
     }); 
    }); 
    res.json(posts); 
}); 

Die console.log Linie ganz gut funktioniert, wie ich in der Lage bin, die Werte in der Konsole zu sehen, wie sie angemeldet sind. Die Werte werden jedoch aus irgendeinem Grund nicht in das Array posts eingefügt. Jeder weiß warum?

Antwort

6

Da dieser Vorgang asynchron ist, müssen Sie Ihr Array zurück zu senden, nachdem Sie Ihre CSV abgeschlossen haben lesen:

router.get('/work', function(req, res, next) { 
    var posts = []; 
    var workbook = new Excel.Workbook(); 
    workbook.xlsx.readFile(file).then(function() { 
     var worksheet = workbook.getWorksheet(1); 
     worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) { 
      console.log(JSON.stringify(row.values)); 
      posts.push(JSON.stringify(row.values)); 
     }); 
     res.json(posts); // moved within the callback to `then` 
    }); 
}); 

Bevor Sie sofort wurden die Anfrage mit Ihrer leeren Array endet, bevor das Versprechen zurück durch readFile aufgelöst und erlaubt es Ihnen, sie mit den Werten aus Ihrer CSV zu füllen.

+0

Vielen Dank für Ihre Antwort, ich bin aber nicht sicher, was Sie in dem obigen Code geändert. Es scheint mit meinem identisch zu sein. Wenn das absichtlich gemacht wurde, könnten Sie bitte ein Beispiel dafür geben, was Sie vorschlagen? – DemCodeLines

+2

@DemCodeLines es ist nicht identisch, aber definitiv schwer visuell zu bestimmen. Ich habe einen Kommentar hinzugefügt, der (hoffentlich) die Dinge verdeutlicht –

+0

Danke, es macht jetzt Sinn. – DemCodeLines

Verwandte Themen