我在自己寻找答案时遇到了这个问题。
基本上,要在节点中编写一个异步函数,你给它的参数之一应该是一个函数;您稍后将在异步函数中调用该函数。
然后,当人们调用您的函数时,他们将能够定义该函数。
这是我以同步方式编写但不起作用的代码示例,以及我如何将其重写为异步并实际工作。
以下代码不起作用:
//synchronous function that doesn't work
var google_request = function(animal_name, sessionid){
var options = {
url: 'http://google.com',
method: 'POST',
json: {
"animal": animal_name,
"sessionid": sessionid
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
return body;
}
});
};
//use your function
var body = google_request("ant", "session1")
console.log(body); //this will return undefined
以下代码确实有效:
//asynchronous function
var google_request = function(animal_name, sessionid, callback_function){
var options = {
url: 'http://google.com',
method: 'POST',
json: {
"animal": animal_name,
"sessionid": sessionid
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
callback_function(body);
}
});
};
//use your function
google_request("ant", "session1", function(body){
console.log(body);
)};
这可能不是最简单的例子,但我对这个函数所做的更改非常简单;我向函数传递了第三个参数,称为“callback_function”,而不是返回“body”,而是在 body 上调用了 callback_function。然后在下面我以通常的“节点”方式使用我的函数,而不是同步方式。
您可能还会发现此线程提供了丰富的信息:如何从异步调用返回响应?