NodeJS CoffeeScript变量范围和回调

时间:2014-10-22 08:52:38

标签: javascript node.js coffeescript

我目前正在开发一个带有nodejs的Coffeescript,它允许我将所有图像转储到Tumblr上。

在第一个循环中,它执行一个请求,通过API获取每个页面上所有图像的列表。

在第二个循环中,它会下载所有图像。

问题是,我不知道为什么,第一个回调永远不会被执行,"开始"计数器永远不会增加。

以下是代码:

xml2json = require "xml2json"
fs = require "fs"
util = require "util"
request = require "request"

tumblr_name = process.argv[2]
api_endpoint = util.format "http://%s.tumblr.com/api/read", tumblr_name
start = 0
num = 50
post_count = 50

download = (uri, filename) ->
  request(uri).pipe(fs.createWriteStream(filename))

while post_count > 0
  console.log util.format "post_count: %s - num: %s", post_count, num
  page_uri = util.format "%s?type=photo&start=%s&num=%s", api_endpoint, start, num
  do (page_uri) ->
    request page_uri, (error, response, body) ->
      console.log util.format "Downloading %s", page_uri
      data_xml = body
      data_json = JSON.parse xml2json.toJson data_xml
      post_count = data_json["tumblr"]["posts"]["post"].length
      for post in data_json["tumblr"]["posts"]["post"]
        post_id = post["id"]
        post_date = post["date-gmt"].split(" ")[0]
        for photo in post["photo-url"]
          if photo["max-width"] == 1280
            outname = util.format "%s-%s-%s.%s", tumblr_name, post_date, post_id, photo["$t"].split(".").slice(-1)[0]
            download photo["$t"], outname
  start = start + num

0 个答案:

没有答案