javascript - JavaScript引擎是如何执行的?

标签 javascript

来自 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/

相关文章:

javascript - 多个表行中的日期

javascript - HTML5 视频在 IE9+10 中不工作

javascript - 如何获取一个类的所有元素而不是另一个类的所有元素?

javascript - jQuery:按钮添加和删除最近

javascript - 修复列表绝对定位(li 隐藏在前两个后面)

javascript - 将带上下文的 HOC 转化为 React 纯函数

javascript - 使用javascript的多个数组的IndexOf数组

javascript - 如何在 JavaScript 中填充对象内的数组?

javascript - 如何制作类似确认的功能

javascript - AngularJS 从 $stateProvider 设置的 Controller 上的指令调用函数?