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

标签 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 对象写入文件。如何等待所有异步函数完成?

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

最佳答案

你可以像这样手动完成

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)

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

关于javascript - 在异步函数中设置和访问全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771874/

相关文章:

javascript - JQuery 中 ("click") 函数中的“奇怪”变量赋值行为

javascript - for循环js中如何调用setTimeout?

Javascript/jQuery 变量未给出预期值

javascript - 浏览器中的 API 响应与代码中的响应不同

Javascript:在 Canvas 上 move 对象(尝试学习面向对象编程)

javascript - 谷歌应用程序脚本: Function to return an arrray of unique values between 2 two ranges

javascript - 面对动态数据的 ng-init 问题

node.js - 无法连接到 Mongoose 错误: MongoError: connect ETIMEDOUT?

Javascript 将新字段分配给对象

javascript - 在 JavaScript 中写入 JSON 文件