node.js - 使结果全局可用(请求模块)

时间:2015-09-29 21:42:48

标签: javascript node.js

我正在尝试处理请求中返回的JSON结果 所以我需要在请求调用之外扩展其范围。 为此,我使用空字符串声明data变量并将结果分配给此data,但它不会打印结果。

我该如何做到这一点?

module.exports = function(callback) {

    var request = require("request")
    var url = "http://sheetsu.com/apis/94dc0db4"
    var data = "";

    request({
        url: url,
        json: true
    }, function (error, response, body) {

        if (!error && response.statusCode === 200) {
            callback(body)

            data = body;

        }
    })

    console.log(data);


}

2 个答案:

答案 0 :(得分:2)

这是经典的异步混淆:您的console.log调用将在http请求回调之前发生。

答案 1 :(得分:1)

您的脚本按此顺序执行:

    执行
  1. request()
  2. console.log(data)
  3. request()回调函数,您在其中将data值设为
  4. 如果要打印data,则必须在请求回调函数中执行此操作。 async模块在​​执行异步任务时非常有用,特别是如果您需要按特定顺序执行任务并使用此请求中的数据。