2013-02-08 54 views
1

这样的代码:设置并参观全局对象在异步函数

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对象到一个文件。我如何等待所有异步功能完成?

或者还有其他办法可以做到这一点吗?

回答

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) 

请照顾我还没有测试这一点。