【发布时间】:2018-05-09 18:42:59
【问题描述】:
我需要将 GET 请求中的数据保存到变量中,然后将其保存在文件中。但是,在某些情况下,GET 请求不会将数据保存到全局变量中。
var fs = require("fs");
var http = require("http");
var request = require('request');
var tmp_json = {};
var g_last = 0;
var data = {};
//request 1
http.get('server:api', (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
tmp_json.server1 = {};
tmp_json.server1 = JSON.parse(data);
g_last = tmp_json.height; // 100500
console.log(g_last); // 100500
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
//request 2
http.get('server2:api', (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
tmp_json.server2 = {};
tmp_json.server2 = JSON.parse(data);
g_last = tmp_json.height; // 256
console.log(g_last); // 256
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
console.log(g_last); // 0
data = JSON.stringify(tmp_json);
fs.writeFile('data.json', data, 'utf8'); // empty file
我也尝试使用 fs.createWriteStream 来实现,但我可以再次将一个请求保存到文件中,但如果有多个请求,我只能捕获缓冲区数据。
【问题讨论】:
-
由于这些请求本质上是异步的,我认为您尝试的操作是不可能的。请记住,异步代码运行不同步,即仅仅因为我在 function2 之前调用 function1 并不一定意味着 function1 将在 function2 之前解析。
标签: javascript json node.js api