我有異步建立在服務器端樹遞歸函數,我想「觀察」它,然後重新運行每次有變化時必須調用方法流星。流星觀測陣列服務器端
我已經提出,建立一個遞歸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集合中並反應性地將其重新構建爲客戶端上的樹。