1

我希望在 Node.js 中进行类似这样的调用(我在 node.js 中使用咖啡脚本)

test = [] //initially an empty array
list = []//an array with 10 json object

for li in list
  get_data url , li, (err,data) -> test.push data

我的 get_data 方法看起来像

get_data: (url, json_data, callback) ->
  throw "JSON obj is required" unless _.isObject(json_data) 
  post_callback = (error, response) ->
    if error
      callback(error)
    else
      callback(undefined, response)
    return
  request.post {url: url, json: json_data}, post_callback
  return

问题是我无法将 request.post 的结果收集到“测试”数组 中我知道我在 for 循环中做错了,但不确定是什么

4

2 回答 2

1

您似乎无法知道所有请求何时返回。你真的应该考虑使用一个好的异步库,但是你可以这样做:

test = [] //initially an empty array
list = []//an array with 10 json object

on_complete = ->
  //here, test should be full
  console.log test
  return

remaining = list.length
for li in list
  get_data url , li, (err,data) ->
    remaining--
    test.push data
    if remaining == 0
      on_complete()
于 2012-10-18T16:05:46.667 回答
0

仅查看您的代码(而不是尝试),问题似乎是“您何时会收到响应”的问题,而不是“是否会收到响应”的问题。在你的 for 循环运行之后,你所做的就是排队一堆请求。您需要对其进行设计,以便在第一个响应之前不会发生第二个请求,或者(更好)您需要一种方法来累积响应并知道所有响应何时返回(或超时)和然后使用不同的回调将控制权返回给程序的主要部分。

顺便说一句,是我为 ActionScript 创建的多文件加载器的代码。由于 I/O 在 ActionScript 中也是异步的,因此它实现了我上面描述的累积方法。它使用事件而不是回调,但它可能会给你一些关于如何为 CoffeeScript 实现这一点的想法。

于 2012-10-18T07:39:19.697 回答