我目前有这段代码从API获取信息并使用收集的信息并将其写入JSON文件。
var xp;
fs.readFile('./xp.json', 'utf8', (err, data ) => {
if (err) throw err;
xp = JSON.parse(data);
});
console.log(m['id'] + " " + m['channel_id'] + " " + m['username']);
var usr = m['id'];
if (!xp[usr])
xp[usr] = {xpp: 0};
xp[usr].xpp++;
fs.writeFile("./xp.json", JSON.stringify(xp), (err) => {
if (err) console.error(err);
});
当我运行这个时,我收到以下错误消息: Error MSG image
所以我猜问题出在if (!xp[usr]) xp[usr] = {xpp: 0};
我对这一行的意图是:
if it's no field in the json object called usr
...
make a field looking like this:
string of usr = {
xpp = 0
}
我已经被困在这个上几个小时了。有什么建议吗?
全功能:
var infoUrl = "https:widget.json";
function giveXP(xyz) {
console.log("Interval Started");
request(xyz, function(error, response, body){
if(!error && response.statusCode == 200){
var parsedData = JSON.parse(body);
var memberz = parsedData['members'];
memberz.forEach(function(m){
if(m['channel_id']){
var xp;
fs.readFile('./xp.json', 'utf8', (err, data ) => {
if (err) throw err;
xp = JSON.parse(data);
console.log(m['id'] + " " + m['channel_id'] + " " + m['username']);
var usr = m['id'];
if (!xp[usr]) xp[usr] = {xpp: 0};
xp[usr].xpp++;
});
fs.writeFile("./xp.json", JSON.stringify(xp), (err) => {
if (err) console.error(err);
});
}
});
}
});
} setInterval(giveXP, 3000, infoUrl);
答案 0 :(得分:1)
一旦fs.read为您提供结果,您需要访问xp [usr]。作为它的异步,你必须将你的代码放在它的回调中。请看下面的代码
var xp;
fs.readFile('./xp.json', 'utf8', (err, data ) => {
if (err) throw err;
xp = JSON.parse(data);
console.log(m['id'] + " " + m['channel_id'] + " " + m['username']);
var usr = m['id'];
if (!xp[usr]) xp[usr] = {xpp: 0};
xp[usr].xpp++;
});
fs.writeFile("./xp.json", JSON.stringify(xp), (err) => {
if (err) console.error(err);
});
// ...
答案 1 :(得分:0)
由于xp
是异步的,因此当时确实不存在readFile
。
所以你需要在回调中移动你的逻辑:
fs.readFile('./xp.json', 'utf8', (err, data ) => {
if (err) throw err;
xp = JSON.parse(data);
if (!xp[usr]) {
xp[usr] = {xpp: 0};
}
xp[usr].xpp++;
fs.writeFile("./xp.json", JSON.stringify(xp), (err) => {
if (err) console.error(err);
});
});