我试图从node.js脚本中的函数中提取json,但没有任何工作
以下是样本:
function parseJson()
{
return req = request(url, function(error,response,body)
{
var json = JSON.parse(body);
console.log(json);
});
}
console.log json正在运行,但我希望能够在此函数之外调用此json,例如在另一个函数中。
感谢您的帮助
答案 0 :(得分:0)
您可以将json存储在范围更广的变量中。或者将parseJson传递给一个回调函数,该函数将依次使用JSON。
function parseJson(callback)
{
return req = request(url, function(error,response,body)
{
var json = JSON.parse(body);
callback(json);
});
}
您还可以返回一个承诺(我认为这是您的request
方法所做的事情),并附加一个.then()
调用该承诺,再次传递回调。
答案 1 :(得分:0)
在node.js中发出http请求时,它会异步执行。在node.js中,大多数异步执行的函数都将callback
参数作为其最后一个参数。回调是在请求完成时执行的函数。该函数的参数通常采用(error, result)
的形式。
因此,您的回调函数应首先检查错误,然后处理结果。因为您需要在node.js中使用回调,所以您不能像使用同步函数那样直接返回值。结果将始终是回调函数中的参数。示例:
var request = require('request');
function parseJson(callback) {
request('https://www.yourapi.com', function (error, response, body) {
if(error) {
callback(error, null);
} else {
var parsed = JSON.parse(body);
callback(null, parsed);
}
});
}
parseJson(function(error, parsedJson) {
if(error){
/* do something with the error */
} else {
console.log(parsedJson);
}
});
这是node.js中非常常见的模式,在this answer中有很好的解释。使用Promises是另一种解决方案。