从我的解析函数返回json

时间:2016-04-14 12:26:15

标签: javascript json node.js

我试图从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,例如在另一个函数中。

感谢您的帮助

2 个答案:

答案 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是另一种解决方案。