我已经对node.js的异步属性以及回调的强大功能进行了大量阅读。
但是,我不明白我是否定义了一个函数并更改了该函数中变量的值,那么为什么它在函数外部不可用。
让我举一个例子来说明我一直在研究的代码。
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();
});
});
此处在函数内部打印pass值时,它会指定新值,但在函数外第二次打印时,它不会给出新值。
如何解决此问题。
答案 0 :(得分: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 :(得分:1)
尝试使用:
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);
答案 2 :(得分:0)
而不是传递=“”
首先声明它并尝试这个var pass =“”;