2013-02-08 1 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) 

Пожалуйста, позаботьтесь я нету испытал это.

Смежные вопросы