gpt4 book ai didi

javascript - Meteor JS 中的 Deps 自动运行

转载 作者:行者123 更新时间:2023-12-02 17:03:34 26 4
gpt4 key购买 nike

今天决定测试 Meteor JS,看看我是否有兴趣用它构建我的下一个项目,并决定从 Deps 库开始。

为了非常快速地测试此功能,我使用 500px API 来模拟更改。快速阅读完文档后,我想我的本地盒子上会有一个它的工作示例。

该函数似乎只自动运行一次,根据我对 Meteor 中此功能的初步理解,这并不是它应该如何工作。

如有任何建议,我们将不胜感激。提前致谢。

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 !在给出实际答案之前需要指出一些事情......

  1. session 变量具有内置 react 性,因此您在使用它们时无需使用 Deps 包来添加 Deps.Dependency 属性。这并不是说您不应该像这样滚动自己的响应式对象,但如果您这样做,那么它的 getset 函数应该返回并更新正常的 javascript对象的属性(例如 value),而不是 Session 变量,其 react 性由 dependchanged 方法提供dep 属性的。另一种方法是直接使用 Session 变量,根本不关心 Api500px 对象。

  2. 我不清楚你在这里想要实现什么 react - 如果应该的话,抱歉。您是否打算在无限循环中重复运行 fetchPhotos,以便每次返回结果时都会再次调用该函数?如果是这样,这确实不是最好的方法 - 订阅服务器发布(使用 Meteor.subscribe 和 Meteor.publish)会更好,获取此发布函数按照所需的规律运行 API 调用,然后将结果发布到客户端。这将大大减少客户端与服务器之间的通信,但最终结果相同。

话虽如此,为什么它只运行一次?想到的两种可能的解释是返回错误(因此永远不会调用 Api500px.set ),或者调用 Session.set如果新值与现有值相同,则实际上不会触发依赖项 changed 事件。但是,在后一种情况下,我仍然希望您的函数重复运行,因为您有自己的 depend 和围绕 Session 变量的 changed 结构,该结构没有实现该自变量限制逻辑,因此在自动运行中包含 Api500px.get 意味着当 Api500px.set 返回时它会重新运行,即使其中有 Session.set实际上并没有做任何事情。如果不是以前的诊断,那么我只需记录所有可见的内容,答案就会出现。

关于javascript - Meteor JS 中的 Deps 自动运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25475375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com