2017-12-05 2 views
0

Ich schreibe ein Knoten-js-Programm, um Inhalt aus einer Datei zu lesen, ich führe dieses Programm mehrmals in kurzer Zeit aus. Manchmal kann ich Dateiinhalte sehen und manchmal nicht (PFA-Screenshot), kann jemand bitte erklären, warum das passiert? Ist das, weil ich keine Versprechungen verwende?Node JS synchrone Ereignisse

var fs= require('fs'); 
fs.readFile('myData.json', (err, data) => { 
    if(err) 
    console.log('Error Found',err.code); 
    else { 
    console.log('inside else'); 
    fs.open('myData.json', 'wx', (err, fd) => { 
     console.log('inside open file'); 
     fs.writeFile('myData.json','test data',(err)=>{ 
     if(err) console.log('error writing data'); 
     }); 
     fs.readFile('myData.json','utf8',(err, data) => { 
     console.log('read file'+data); 
     }); 
    }); 
    } 
}); 

Screen Shot:

enter image description here

+0

Ich sehe nicht, dass Sie die Datei nach dem Lesen/Schreiben schließen. Ich glaube, es ist eine gute Methode, um sicherzustellen, dass die Datei geschlossen ist, bevor Sie weitermachen, und deshalb schlägt es vielleicht inkonsistent fehl. – Mickers

+0

Sie beginnen zu lesen, warten darauf, beginnen zu öffnen, warten darauf, schreiben und lesen gleichzeitig. Vielleicht würde eine sauberere Einrückung helfen. – Bergi

Antwort

2

können Sie versuchen, nach der Fixierung folgenden Code

fs.writeFile('myData.json','test data',(err)=>{ 
    if(err) console.log('error writing data'); 
    fs.readFile('myData.json','utf8',(err, data) => { 
    console.log('read file'+data); 
    }); 
}); 

Sie gesetzt haben Datei in Asynchron mit Write-Datei lesen. Sie müssen die Datei nach dem Schreiben lesen.

2

fs.readFile und fs.writeFile sind asynchron. Sie starten die readFile sofort nach dem Aufruf von writeFile. Dies bedeutet, dass writeFile Zeit haben kann oder auch nicht (wahrscheinlich nicht), bevor ReadFile ausgeführt wird.

Versuchen Sie, die readFile in den WriteFile-Callback zu setzen. Der Rückruf wird nach Abschluss der asynchronen Funktion aufgerufen, sodass Sie Code synchron verarbeiten können.

Ich bin mir nicht sicher, dass die readFile -> open -> writeFile -> readFile Logik sehr sinnvoll ist.

+0

Sie haben recht, readFile -> öffnen -> writeFile -> readFile macht keinen Sinn. Ich bin neu in Async Programmierung und Node JS versuchte etwas sehr zufälliges, danke für Ihren Kommentar –

2

Mit neuesten Node.js v9.2.0 Documentation

fs.writeFile(file, data[, options], callback)

...

Asynchron schreibt Daten in eine Datei, ersetzen Sie die Datei, wenn es bereits existiert. Daten können eine Zeichenfolge oder ein Puffer sein.

Da Sie wollen writefile synchron sollten Sie

fs.writeFileSync(file, data[, options])

verwenden ...

Die synchrone Version von fs.writeFile(). Gibt undefined zurück.