我想在Node.js中调用这样的东西(我使用coffeescript作为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的结果收集到'test'数组中 我知道我在for循环中做错了但不确定是什么
答案 0 :(得分:1)
您似乎无法知道所有请求何时返回。你应该考虑使用a good async library,但是你可以这样做:
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()
答案 1 :(得分:0)
只是看着你的代码(没有尝试过),问题似乎是“当你得到答案时”,而不是“如果你得到答案”的问题。在for循环运行之后,您所做的就是排队一堆请求。您需要设计它,以便第一个请求不会发生,直到第一个响应或者(更好)您需要一种方法来累积响应并知道所有响应何时返回(或超时)并且然后使用不同的回调将控制权返回给程序的主要部分。
BTW,here是我为ActionScript创建的多文件加载器的代码。由于I / O在ActionScript中也是异步的,因此它实现了我在上面描述的累积方法。它使用事件而不是回调,但它可能会给你一些关于如何为CoffeeScript实现它的想法。