我正在使用nodeJS请求包,并且想将JSON从一个函数返回到另一个函数。 目前,我的解决方案是:
var request = require('request');
function A() {
var url = "---";
var headers = { 'data': '---' };
var resp = request.get({ url: url, headers:headers }, function (e, r,
body)
{
console.log(body)
});
return response;
}
function B() {
data = A();
console.log("recived data");
console.log(data);
}
B();
我遇到了回调,但是我对如何使用它们感到非常困惑。我来自python背景。我很困惑如何将身体从FuncA放回FuncB。因为在这种情况下,我没有收到想要的尸体。它为我提供了一些数据,例如事件JSON,回调JSON等。
答案 0 :(得分:-1)
您可以如下使用async/await
和request-promise:
var request = require('request-promise');
async function A() {
var url = "---";
var headers = { 'data': '---' };
var resp = await request.get({ url: url, headers:headers });
return response;
}
async function B() {
data = await A();
console.log("recived data");
console.log(data);
}
B();
答案 1 :(得分:-1)
您可以将回调视为在完成某些操作(通常而言)后调用的函数。在您的示例中,回调是此函数:
function (e, r,
body)
{
console.log(body)
}
因此,您需要在该回调内部返回,因为那是从请求中获取响应的时间。在您的示例中,您在实际返回响应之前就返回了响应,因为即使您尚未收到响应,代码也将继续执行并命中return语句。另外,变量response
不存在。
上面的Amir解决方案是一种干净而不错的方法。是使用基于Promises的非常新的async / await语法。我建议您同时查看这两个概念,但是回调在JS中仍然很常见(可能是最常见的),因此了解它们很重要。
如果要在示例中使用回调,请尝试以下操作:
var request = require('request');
function A(callback) {
var url = "---";
var headers = { 'data': '---' };
var resp = request.get({ url: url, headers:headers }, function (e, r,
body)
{
console.log(body)
callback(r); // Here, we send the response to the callback function
});
}
function B() {
A(function(data) { // this is the callback function sent to A()
console.log("recived data");
console.log(data);
});
}
B();
(尽管我目前无法自己测试此代码,所以可能会有一些错别字。)
编辑:如果要使用在函数B中获得的数据,则可以像这样将其传递给回调函数:
function B(callback) {
A(function(data) { // this is the callback function sent to A()
console.log("recived data");
console.log(data);
callback(data);
});
}
要使用功能B中的数据:
B(function(data) {
// do something with the data here
});