Coffeescript 在执行集合转换之前获取服务器方法结果

Coffeescript 在执行集合转换之前获取服务器方法结果,coffeescript,meteor,Coffeescript,Meteor,我有一个模型目录,每个文件有一个类,我想在我的集合转换方法中读取并列出所有这些文件,以使用正确的类初始化我的文档 服务器/方法。咖啡: Meteor.methods 已实施的货币:-> """ 返回已实现的硬币列表 """ files=fs.readdirSync./app/models/cryptos/' 在files.filter(文件)-> file.search(“(base_crypto*)(js.map)”)=-1 收藏/地址。咖啡: 如果Meteor.isReady @imple

我有一个模型目录,每个文件有一个类,我想在我的集合转换方法中读取并列出所有这些文件,以使用正确的类初始化我的文档

服务器/方法。咖啡

Meteor.methods
已实施的货币:->
"""
返回已实现的硬币列表
"""
files=fs.readdirSync./app/models/cryptos/'
在files.filter(文件)->
file.search(“(base_crypto*)(js.map)”)=-1
收藏/地址。咖啡

如果Meteor.isReady
@implementedCoins=Meteor.call“implementedCoins”
@地址=新Meteor.Collection“地址”,
转换:(doc)->
#从代码中检索类,并将地址传递给它
如果@implementedCoins中的doc.code
新@[doc.code]doc.address
其他医生
客户/视图/地址/地址列表。咖啡

Template.userAddresses.helpers
用户地址:->
地址=地址。查找
userId:Meteor.user()。\u id
地址。为地址中的地址设置_balance()
回信地址
现在,我在客户端控制台上遇到以下错误:

Exception from Deps recompute: TypeError: Array.prototype.indexOf called on null or undefined
    at indexOf (native)
    at Addresses.Meteor.Collection.transform
这意味着在我的集合转换中,
@implementedCoins
变量未定义,因为我没有正确实现它


你知道如何解决这个问题吗?

我很肯定这是错误的:

if Meteor.isReady
  @implementedCoins = Meteor.call "implemented_coins"
我认为
Meteor
中没有同名字段,即使是,也会在启动时执行,但当时
isReady
可能为false,因此没有设置变量。你是说Meteor.startup?其次,在客户机上,您需要为
调用
使用回调,因为客户机上没有光纤

这样行吗

Meteor.startup(function () {
    Meteor.call("implemented_coins", function(err, res) { 
         implementedCoins = res; 
    });
});

感谢您的快速回答:)是的,它似乎与您的方法一起工作(其他需要修复的bug,但似乎并不相关)。我有点困惑,为什么在地址转换之前调用回调,你能解释一下吗?不确定,但可能是因为集合尚未准备就绪。实际上,最初在页面加载时会调用它,但此时集合为空,因此转换不适用。当集合同步到客户端时,它会重新运行。非常感谢你!