我有异步建立在服务器端树递归函数,我想“观察”它,然后重新运行每次有变化时必须调用方法流星。流星观测阵列服务器端
我已经提出,建立一个递归READDIR调用树(在实际应用中存在,可能需要每个节点几分钟的计算,其结果取决于已经探索过的节点上)
在一个简单的例子服务器/ methods.js
var fs = Meteor.npmRequire('fs')
var path = Meteor.npmRequire('path')
var tree = function (dir, r) {
try
{
fs.readdir (dir, function (error, files) {
if (files && files.length)
for (var i = 0; i < files.length; i++)
{
r[i] = { name : files[i], children : [] }
tree(path.resolve(dir, files[i]), r[i].children)
}
})
} catch (e) { console.log("exception", e)}
}
Meteor.methods({
'build_tree' : function() {
var r = []
tree("/tmp/", r)
return r // Wrong !
}
})
在客户
/client.js
Meteor.call('build_tree', function (error, result) {
console.log(error, result)
}
我已经在基于代码的其他部分使用期货在https://www.discovermeteor.com/patterns/5828399。
但在这种情况下,我莫名其妙地失去了应有的
- 服务器端代码
- 其实我想要的客户端每次都自动更新服务器端数据的递归性质结构已更新
我想到的唯一解决方法是逐步将异步结果插入到'扁平'Mongo集合中并反应性地将其重新构建为客户端上的树。