今天是我第一次涉足 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/