在异步函数中设置和访问全局对象

时间:2013-02-08 11:47:53

标签: javascript node.js asynchronous coffeescript

这样的代码:

fileArray = ['a.json','b.json','c.json']
dict = {}
fileArray.map (f) ->
  fs.readFile f, (err, data) ->
    json.parse data, (k, v) ->
      dict[k] = v

我想将dict对象写入文件。我如何等待所有异步功能完成?

或者还有其他方法吗?

1 个答案:

答案 0 :(得分:3)

您可以像这样手动执行此操作

fileArray = ['a.json','b.json','c.json']
dict = {}
counter = 0
fileArray.map (f) ->
    fs.readFile f, (err, data) ->
        counter +=1
        json.parse data, (k, v) ->
            dict[k] = v
        if counter >= fileArray.length
            fs.writeFile("mydict.txt", dict.toString())

或者您使用异步库(例如https://github.com/caolan/async

fileArray = ['a.json','b.json','c.json']
dict = {}
counter = 0
read = (file)->
    fs.readFile f, (err, data) ->
        json.parse data, (k, v) ->
            dict[k] = v

fns = ((do (file) -> read(file)) for file in fileArray)
#use the async lib
async.parallel fns, -> fs.writeFile "mydict.txt", json.stringify(dict)

请注意我没有测试过这个。