JavaScript超出范围未定义
变量out被指定为等于结果。当结果和输出在函数范围内打印时,它会正确打印,但当我在函数范围外打印输出时,它是未定义的。为什么会发生这种情况以及如何修复它?这就是我们使用回调的原因!您确定最后一行打印的是未定义的,而不是JavaScript超出范围未定义,javascript,node.js,function,scope,functional-programming,Javascript,Node.js,Function,Scope,Functional Programming,变量out被指定为等于结果。当结果和输出在函数范围内打印时,它会正确打印,但当我在函数范围外打印输出时,它是未定义的。为什么会发生这种情况以及如何修复它?这就是我们使用回调的原因!您确定最后一行打印的是未定义的,而不是[]?我们如何使用回调?你能帮忙吗?还有?为什么out未定义?要修复它,您应该使用out内部回调执行一些操作 var http = require('http'); var MongoClient = require('mongodb').MongoClient; var url
[]
?我们如何使用回调?你能帮忙吗?还有?为什么out
未定义?要修复它,您应该使用out
内部回调执行一些操作
var http = require('http');
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/testdb";
var companies = [{'name' : 'Sun Pharma', 'medicine' : [1, 2]},
{'name' : 'Hello Pharma', 'medicine' : [3, 4]},
{'name' : 'Sayan Pharma Ltd.', 'medicine' : [5]}]
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var companyCollection = db.collection ('company');
companies.forEach ((company) => {
companyCollection.insert (company);
});
var out;
companyCollection.find({}).toArray(function (err, result) {
if (err) {
console.log (err);
} else if (result.length) {
console.log (result); // Prints correct array
out = result;
console.log (out); // Prints correct array
} else {
console.log ('No documents found');
}
db.close();
});
console.log (out); // Prints undefined
});
var out = []; // 1.
companyCollection.find({}).toArray(function (err, result) {
if (err) {
console.log (err);
} else if (result.length) {
console.log (result); // 3. asynchronous code in callback
out = result;
console.log (out); // 4. asynchronous code in callback
} else {
console.log ('No documents found');
}
db.close();
});
console.log (out); // 2. synchronious code