javascript - 难以理解 Node.js 回调

标签 javascript node.js callback mocha.js

今天是我第一次涉足 Nodejs,我对理解以下逻辑流程的方式感到特别困惑。逻辑如下:

request({ uri: db.createDbQuery('identifier:abcd1234') },
                    function(err, response, body) {
                        response.should.have.status(200);
                        var search = JSON.parse(body);
                        search.response.numFound.should.equal(1);
                        done();
                    });
        });

在更高的层面上,我确实理解正在发出一个http请求,并且在某个时刻调用该函数来获取响应并对其执行某些操作。我想要了解的是调用的正确顺序以及变量的绑定(bind)如何在上述给定的逻辑中发生。编译器如何知道如何将请求的返回值绑定(bind)到匿名函数?基本上,我想了解此代码片段的幕后工作原理。

谢谢

最佳答案

你的问题并不是特定于node.js,这基本上是javascript的一个功能。

基本上,您正在调用request(),其定义类似于function request(obj,callback)

在内部,http请求正在被调用,一旦完成,它就会调用callback,它实际上是一个函数指针。

function request(obj, callback){
    //http request logic...
    var err = request_logic_internal_function();
    var response = ...
    var body = ...


    callback(err, response, body)
}

您的代码实际上可以重组为:

var options = { uri: db.createDbQuery('identifier:abcd1234') };
var request_callback = function(err, response, body) {
                        response.should.have.status(200);
                        var search = JSON.parse(body);
                        search.response.numFound.should.equal(1);
                        done();
                    };
request(options, request_callback);

您基本上所做的是将函数指针作为变量发送。

关于javascript - 难以理解 Node.js 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903330/

相关文章:

javascript - 使用 Node js 进行 websocket ping

android - 从回调更新 Android TextView

javascript - 如何从javascript调用点击事件?

javascript - A-Z 类别 View

node.js - 如何在 Express 中使用比较运算符过滤查询字符串

node.js - Google 忽略 HTTP GET 的 "Range" header ?

javascript - 在循环后运行一个函数

javascript - 使用异步瀑布时绑定(bind)回调函数

javascript - 如何保存复选框值和状态

javascript - 考虑到过滤选项是可选的,过滤数组