2016-03-21 9 views
0

Ich habe viel über die asynchrone Eigenschaft unserer node.js und über die Möglichkeiten von Callbacks gelesen.Node.js Variablenbereich außerhalb der Funktion

Aber ich verstehe nicht, wenn ich eine Funktion definieren und den Wert der Variablen innerhalb dieser Funktion ändern, warum ist es außerhalb der Funktion nicht verfügbar.

Lassen Sie mich anhand eines Beispiels auf den Code zeigen, an dem ich gearbeitet habe.

var findRecords = function(db, callback) { 

var cursor =db.collection('meta').find({"title":"The Incredible Hulk: Return of the Beast [VHS]"}, {"asin":1,_id:0}).limit(1); 
pass=""; 
cursor.each(function(err, doc) { 
     assert.equal(err, null); 
     if (doc != null) { 
      var arr = JSON.stringify(doc).split(':'); 
      key = arr[1]; 
      key = key.replace(/^"(.*)"}$/, '$1'); 
      pass =key; 
      console.log(pass); //Gives correct output 
     } 

    }); 

    console.log(pass) //Does not give the correct output 

}; 



MongoClient.connect(url, function(err, db) { 
    assert.equal(null, err); 

    findRecords(db, function() { 
     db.close(); 
    }); 
}); 

Hier, wenn der Wert des Durchlaufs in der Funktion Druck gibt es den neuen Wert zugewiesen, aber wenn außerhalb der Funktion zum zweiten Mal Druck ist es nicht den neuen Wert geben.

Wie kann dieses Problem behoben werden.

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures –

Antwort

0

Anstelle von pass = ""
zuerst deklarieren Sie es und versuchen Sie es var pass = ""; mit

+0

Das funktioniert nicht. – Arqam

1
let pass = 'test'; 

[1, 2, 3].map(function(value) { 
    let pass = value; 
    // local scope: 1, 2, 3 
    console.log(pass); 
}); 

console.log(pass); // => test 

// ------------------------------ 

let pass = 'test'; 

[1, 2, 3].map(function(value) { 
    pass = value; 
    // local scope: 1, 2, 3 
    console.log(pass); 
}); 

// the last value from the iteration 
console.log(pass); // => 3 

// ------------------------------ 

// we omit the initial definition 

[1, 2, 3].map(function(value) { 
    // note the usage of var 
    var pass = value; 
    // local scope: 1, 2, 3 
    console.log(pass); 
}); 

// the variable will exist because `var` 
console.log(pass); // => 3 

// ------------------------------ 

// we omit the initial definition 

[1, 2, 3].map(function(value) { 
    // note the usage of var 
    let pass = value; 
    // local scope: 1, 2, 3 
    console.log(pass); 
}); 

// the variable will not exist because using let 
console.log(pass); // => undefined 
1

Versuchen:

var pass=""; 
var that = this; 
cursor.forEach(function(err, doc) { 
     assert.equal(err, null); 
     if (doc != null) { 
      var arr = JSON.stringify(doc).split(':'); 
      key = arr[1]; 
      key = key.replace(/^"(.*)"}$/, '$1'); 
      pass =key; 
      console.log(pass); //Gives correct output 
     } 

    }, that); 
console.log(pass); 
Verwandte Themen