当前位置:  开发笔记 > 编程语言 > 正文

在Meteor的一个函数中使用.find().fetch()

如何解决《在Meteor的一个函数中使用.find().fetch()》经验,为你挑选了1个好方法。

我正在与Meteor进行一个项目,我在尝试从JavaScript中获取mongodb的数据时遇到了一些问题.我在函数中有以下内容:

console.log(Time.find({today: "Saturday"}).fetch());

在我的服务器端的publish.js文件中,我有以下内容:

Meteor.publish("time", function () {
  var currentUserId = this.userId;
  return Time.find({user: currentUserId});
});

在我的订阅文件中,我有以下内容:

Meteor.subscribe("time");

此函数稍后在代码中调用,但它返回一个空数组.如果我在浏览器控制台中运行此代码,则会返回一个包含2个对象的数组,这是正确的.这让我想知道我是否可以在我的代码中使用.fetch()函数?好像我放弃了.fetch(),它返回看起来像通常的巨型对象.我真正的问题是我需要.fetch()给我的形式的数据.我认为这是因为函数在数据有机会加载之前被触发,好像我切换出.fetch()对于.count(),它返回0.

有没有办法绕过这个或修复?



1> bigmadwolf..:

你在哪里运行console.log?

这里有几个fundementals,我相信你可能已经掩饰了.

1 Pub/Sub

这就是我们从服务器获取数据的方式,当我们订阅一个出版物时我变得活跃并开始发送数据,这既不是即时的也不是同步的(想想它更像打开软管),所以当你运行你的console.log,您可能还没有客户端上的数据.

2反应性背景

在流星中构建任何东西的基本方面之一是它的反应性.并且它有助于开始考虑反应性和非反应性背景.反应性上下文是每次依赖于更改的数据时重新运行的上下文.使用自动运行(Tracker.autorun或this.autorun insdie模板生命周期回调)或模板帮助程序就是很好的例子.通过将其放在模板助手中,它将在数据可用时重新运行.

Template.Whatever.helpers({
    items: function() {
        // ...do your find here.....
    }
});

由于项目是反应性上下文,因此根据收集数据,它会在更改时重新运行,从而允许您在客户端拥有数据时访问数据.

3检索非活动数据

或者,也可以通过Meteor.call使用流星方法非反应性地检索数据,然后在回调Meteor.call中对结果做一些事情.根据你正在做的事情,Meteor.wrapAsync也可能是你的朋友.

一个简单的例子(从我的头脑中,未经测试):

// on the server
Meteor.methods({
    gimmeStuff: function() {
        return "here is your stuff kind sir!";
    }
});

// on the client
Meteor.call('gimmeStuff', function(err, result) {
    if (err || !result) {
       console.log("there was an error or no result!");
       return false;
    }

    console.log(result);
    return result;
});

4它不太可能你真的需要它 .fetch()

如果您在模板中使用此功能,则无需获取.

如果您希望这是非反应性的,则不需要获取

作为提到的评论者之一,游标只是该数组的包装,为您提供方便的方法和反应.

5回到开始

如果您还没有,我强烈建议您仔细彻底地完成流星网站上的教程,因为它涵盖了解决比这更具挑战性的问题所需的所有基本要素,以及例如,教你使用Meteor构建优秀应用程序的所有基本机制.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有