我有这个代码,问题是,我需要它从该网站获取一些数据, 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文件?
答案 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
(使用let
或const
代替),那么您将不会遇到问题确定你在这里,所以遵循和强制执行是一个很好的做法。
这是其中一个问题。可能会有更多,但这肯定是其中之一。
回答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);
}
并比较输出。
这表明了let
和var
之间的区别。
有关let
和var
: