我想在流星服务器上创建一个反应式集合查询,并在发生更改时处理结果.
这是我的代码:
if (Meteor.isServer) {
Meteor.startup(function(){
Deps.autorun(function(){
var items=new Meteor.Collection('name').find().fetch();
// ... process the items ...
});
});
}
Run Code Online (Sandbox Code Playgroud)
(实际上,对于此测试,整个项目仅包含一个.js文件中的上述代码).启动此程序时meteor会抛出错误:
/home/yaakov/Bug/.meteor/local/build/programs/server/boot.js:198
}).run();
^
Error: Can't call yield in a noYieldsAllowed block!
at Function.Fiber.yield (packages/meteor/fiber_helpers.js:11)
at Function.wait (home/yaakov/.meteor/tools/cef2bcd356/lib/node_modules/fibers/future.js:111:14)
at Object.Future.wait (/home/yaakov/.meteor/tools/cef2bcd356/lib/node_modules/fibers/future.js:325:10)
at new MongoConnection (packages/mongo-livedata/mongo_driver.js:196)
at new MongoInternals.RemoteCollectionDriver (packages/mongo-livedata/remote_collection_driver.js:4)
at Object.<anonymous> (packages/mongo-livedata/remote_collection_driver.js:44)
at Object.defaultRemoteCollectionDriver (packages/underscore/underscore.js:750)
at new Meteor.Collection (packages/mongo-livedata/collection.js:72)
at app/Bug.js:4:17
at packages/deps/deps.js:47
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何在流星服务器上创建响应式收集查询?
该Deps程序包仅适用于客户端,因此您无法Deps.autorun在服务器上使用.
要在服务器上使用类似反应的查询,请使用observe:
var items=collection.find().observe({
added: function (document) {
// ...
},
changed: function (newDocument, oldDocument) {
// ...
},
removed: function (oldDocument) {
// ...
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |