2017-12-05 6 views
2

mein Code:NodeJS fs.exists (fs.access) hat merkwürdige Dinge geschehen in for-Schleife

for(var i=0; i<2; i++) 
{ 
    console.log("idx: " + i); 

    fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => { 
     console.log(err ? 'no access!'+i : 'can read/write'+i); 
    }); 

    fs.exists('/etc/passwd', (exists) => { 
     console.log(exists ? 'it\'s there'+i : 'no passwd!'+i); 
    }); 
} 

Ergebnis:
idx: 0
idx: 1
kein Zugriff 2
es ist there2
kein Zugang! 2
es there2

warum der i = 2?
Wie kann ich es beheben?

Antwort

2

Der Schlüssel zu Ihrem Problem ist die Asynchronität. Beide fs-Methoden sind asynchron und werden später ausgeführt, und wenn sie ausgeführt werden, ist der Wert von i 2, weil die Schleife beendet ist.

Der einfachste Weg, indem wir es ändert sich die Deklaration der Schleife var zu lösen

for(let i=0; i<2; i++) 

Es begrenzt den Umfang von i auf eine Iteration

1

fs.access und fs.exists sind Asynchron-Anrufe und wenn sie erhalten ihre Callbacks ausgeführt wurde der Akku wurde bereits auf 2 gesetzt, wegen der Schleife.