流星JS中的Deps自动运行
Deps autorun in Meteor JS
决定今天测试一下Meteor JS,看看我是否有兴趣用它来构建我的下一个项目,并决定从Deps库开始。
为了快速测试此功能,我使用500px API来模拟变化。在快速阅读了文档之后,我想我应该在我的本地盒子上有一个工作示例。该函数似乎只自动运行一次,这不是如何应该是基于我在流星这个功能的初步理解工作。
如有任何建议,我将不胜感激。提前谢谢。if (Meteor.isClient) {
var Api500px = {
dep: new Deps.Dependency,
get: function () {
this.dep.depend();
return Session.get('photos');
},
set: function (res) {
Session.set('photos', res.data.photos);
this.dep.changed();
}
};
Deps.autorun(function () {
Api500px.get();
Meteor.call('fetchPhotos', function (err, res) {
if (!err) Api500px.set(res);
else console.log(err);
});
});
Template.photos.photos = function () {
return Api500px.get();
};
}
if (Meteor.isServer) {
Meteor.methods({
fetchPhotos: function () {
var url = 'https://api.500px.com/v1/photos';
return HTTP.call('GET', url, {
params: {
consumer_key: 'my_consumer_key_here',
feature: 'fresh_today',
image_size: 2,
rpp: 24
}
});
}
});
}
欢迎来到Meteor!在给出实际答案之前,有几件事需要指出……
-
会话变量已经内置了响应性,所以当你使用它们时,你不需要使用Deps包来添加
Deps.Dependency
属性。这并不是建议你不应该像这样滚动你自己的响应对象,但是如果你这样做,那么它的get
和set
函数应该返回和更新对象的正常javascript属性(如value
),而不是会话变量,由dep
属性的depend
和changed
方法提供的响应性。另一种选择是直接使用Session变量,根本不用担心Api500px
对象。 -
我不清楚你在这里想要达到什么反应-如果应该道歉。您是否打算在无限循环中重复运行
fetchPhotos
,以便每次返回结果时再次调用函数?如果是这样,这真的不是最好的处理方法——订阅服务器发布(使用Meteor.subscribe
和Meteor.publish
),获取这个发布函数以所需的任何规律运行API调用,然后将结果发布到客户端会好得多。这将大大减少客户端与服务器之间的通信,但最终结果相同。
说了这么多,为什么它只运行一次?想到的两种可能的解释是,返回了一个错误(因此Api500px.set
从未被调用),或者如果新值与现有值相同,Session.set
调用实际上不会触发依赖changed
事件。然而,在后一种情况下,我仍然希望你的函数重复运行,因为你有自己的depend
和changed
结构围绕会话变量,它不实现自我限制的逻辑,所以在自动运行中有Api500px.get
应该意味着它在Api500px.set
返回时重新运行,即使Session.set
内部实际上没有做任何事情。如果不是前一种诊断,那么我就把看到的所有东西都记录下来,然后答案就会自动出现。
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何使用JS/nightwatchjs并行运行多个测试
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- 流星JS中的Deps自动运行
- Meteor Users集合和Deps.自动运行的问题