来自 Java 后端(一种更正式的语言,具有强大的语法和无函数传递),我对 JavaScript 执行有一些初学者疑问。
var mongodb = require('mongodb');
var mongoClient = mongodb.MongoClient;
var dbUrl = 'mongodb://localhost:27017/test';
var con;
function callback(err, db) {
if (err) console.log('Unable to connect to the mongoDB server. Error:', err);
else {
console.log('Connection established to', dbUrl);
con = db;
findEmps(con, function() {
console.log("After find");
con.close();
});
}
}
mongoClient.connect(dbUrl, callback);
function findEmps(db, callback) {
var cursor = db.collection('emp').find();
//iterate on the result
cursor.each(function(err, result) {
assert.equal(err, null);
if (result != null) {
console.dir(result);
} else { //end of cursor where result is null
console.log("In ELSE");
callback(err, con);
}
});
}
console.log("END");
为什么首先打印 END?
最佳答案
您所做的大部分事情都涉及回调的使用。
您正在将一个函数作为参数传递给另一个函数。然后另一个函数调用它。它可能不会(在这些情况下不会)立即调用它。
mongoClient.connect(dbUrl, callback);
这本质上是告诉另一个进程开始连接到数据库。当该进程返回连接报告时,将调用回调函数。
与此同时,程序的其余部分 (console.log("END");
) 继续执行。
习惯让回调函数(而不是返回值)负责处理对此类异步操作的响应。
关于javascript - JavaScript引擎是如何执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110027/