创建.json文件的代码片段不起作用

时间:2016-12-25 22:50:33

标签: javascript arrays json node.js api

我有这个代码,问题是,我需要它从该网站获取一些数据, apiurl 中的字符串。此代码需要下载这些网站,并在json中找到某些appids。它需要下载这些网站上的数据并将它们存储在json文件中。出于某种原因,这不起作用。

我在.js文件中有这段代码:

{
    "keys": [
            {
                "appid": 10,
                "price":0, 
                "listofkeys":[], 
                "game": "Counter-Strike"
            },
            {
                "appid": 20,
                "price":0, 
                "listofkeys":[], 
                "game": "Team Fortress Classic"
            },
            {
                "appid": 30,
                "price":0, 
                "listofkeys":[], 
                "game": "Day of Defeat"
            },
            {
                "appid": 40,
                "price":0, 
                "listofkeys":[], 
                "game": "Deathmatch Classic"
            },

我有一个json文件,json文件名为 gamekeys.json

这是:

.col-12

它继续前进(200万行)

为什么第一个代码不能创建95个json文件?

1 个答案:

答案 0 :(得分:2)

问题是,appid对所有writeFile次调用都相同。

尝试更改:

appid = gamekeys.keys[i].appid;

为:

let appid = gamekeys.keys[i].appid;

您需要为所有回调创建一个新的绑定,否则它们都会获得相同的值(从最后一次循环迭代)。请注意,此处var不起作用,您需要let。如果您在其中一个闭包中使用i,那么您还需要使用for (let i = ...)代替for (var i = ...)

apiurl可以使用var声明,因为它的值传递给request()调用而不是被闭包捕获,但是如果你使用let的时间,永远不要使用var你不必担心它。

如果您始终使用'use strict';(带引号)启动每个程序,并且从不使用var(使用letconst代替),那么您将不会遇到问题确定你在这里,所以遵循和强制执行是一个很好的做法。

这是其中一个问题。可能会有更多,但这肯定是其中之一。

更新

回答Alex的评论"为什么他不能使用var appid"

运行此代码:

for (var i = 0; i < 4; i++) {
  let appid = 'ID' + i;
  setTimeout(function () {
    console.log(appid);
  }, 500 * i);
}

运行此程序:

for (var i = 0; i < 4; i++) {
  var appid = 'ID' + i;
  setTimeout(function () {
    console.log(appid);
  }, 500 * i);
}

并比较输出。

这表明了letvar之间的区别。

有关letvar

之间差异的详情,请参阅此答案