Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环中变量更新不正确_Javascript_Node.js_Coffeescript - Fatal编程技术网

Javascript 循环中变量更新不正确

Javascript 循环中变量更新不正确,javascript,node.js,coffeescript,Javascript,Node.js,Coffeescript,我一直在玩coffeescript中的node.js,从reddit.com的json接口中获取一些故事,但遇到了一些障碍 我想从http://www.reddit.com/r/programming/.json,然后在之后附加带有参数count和的查询语句并重新分析。根据传递给get\u stories() 当我以file.js>test.txt运行下面的代码时,我得到了意想不到的结果。(见下文)看起来像是querystring.count正在更新,但它们都与上一次传递中的URL相匹配。不知道

我一直在玩coffeescript中的node.js,从reddit.com的json接口中获取一些故事,但遇到了一些障碍

我想从
http://www.reddit.com/r/programming/.json
,然后在之后附加带有参数
count
的查询语句并重新分析。根据传递给
get\u stories()

当我以
file.js>test.txt运行下面的代码时,我得到了意想不到的结果。(见下文)看起来像是
querystring.count
正在更新,但它们都与上一次传递中的URL相匹配。不知道为什么我没有看到count=0,25,50,75125。此外,
querystring.after
在URL上不存在。发生了什么事

代码:

输出:

http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
http://www.reddit.com/r/programming/.json?count=125
[编辑]

如果需要链接异步操作,如设置
querystring.after
下一个
请求
,则在
期间将无法使用
。循环将运行到完成,在所有
请求完成之前启动所有
s,然后可以设置
querystring.after

您可以使用
函数
s将迭代重写为连续,这样每个请求都将等待,直到上一个请求中的
可用

旁注:由于
after
应该已经移动了集合的开头,因此您可能希望保持
count
相同的值。否则,集合的大小将随着每个请求而增加

get_stories = (subreddit, {per_page, pages}, storyCallback) ->
    current_page = 0

    send_next_request = (querystring = {}) ->
        querystring.count = per_page

        request_uri = "http://www.reddit.com/r/#{subreddit}/.json?#{qs.stringify querystring}"

        request
            uri: request_uri,
            json: true,
            (error, response, body) ->
                if !error and response.statusCode == 200
                    for item in body.data.children
                        if item.data.selftext_html is null
                            storyCallback request_uri, current_page, item.data

                    current_page++
                    if current_page < pages
                        send_next_request(after: body.data.children[body.data.children.length-1].id)

    send_next_request()
JavaScript和CoffeeScript()没有块作用域,因此整个循环只创建1个
request\u uri
,并且只能保留1个值

加上
请求
是异步的,
while true
循环将在以下时间之前运行到完成:

storyCallback request_uri, current_page, item.data
对任何请求进行评估。此时,
request\u uri
将始终具有循环中给出的最后一个值

闭包创建了一个额外的
函数
作用域,因此
的每次迭代都可以有自己的
请求uri

request_uri = "http://www.reddit.com/r/#{subreddit}/.json?#{qs.stringify querystring}"

do (request_uri) ->
  request
    url: request_uri,
    # ...

这记录在:

当使用JavaScript循环生成函数时,通常会插入一个闭包包装器,以确保循环变量被关闭,并且所有生成的函数不只是共享最终值。CoffeeScript提供
do
关键字,该关键字立即调用传递的函数,转发任何参数

for filename in list
  do (filename) ->
    fs.readFile filename, (err, contents) ->
      compile filename, contents.toString()

这对uri非常有效!关于为什么
after
参数没有显示在任何URI上,您有什么见解吗?也因为代码的异步性质。有什么方法可以让它工作吗?@Kylee这是因为
while
循环已经完成,并且在任何
请求完成设置
querystring.after之前,已经启动了所有
请求。查看我的编辑了解更多信息。这很有效!我知道异步导致了很多这些问题,但不知道如何解决它们。因此,在服务器端使用Python,客户端上的JavaScript。@ Kylee,您也可以考虑使用一个“控制流”库,例如,包含异步<代码>,而 AS <代码>异步。
for filename in list
  do (filename) ->
    fs.readFile filename, (err, contents) ->
      compile filename, contents.toString()