javascript - 如何返回数组/值作为可以在模板中使用的光标?

标签 javascript arrays meteor return-value return-type

我有一个辅助函数,它返回一个数组,而不是传统的 db.dbName.find() 游标。如何编写一个返回数组,使其反射(reflect)为类似于由可在模板中使用的db.dbName.find()生成的光标?

在下面找到我的辅助函数:

    var arrayTest = Meteor.call('getUserCategoryArray', function(error, results){
    if(error){
        console.log(error.reason);
    } else {          

     var results1 = results.toString();
     var results2 = results1.split(",");
     alert("Array content: " +results2);
     alert(results2[0]);
     alert(results2[1]);
     alert(results2[2]);

     return results2;

     }
 })

解释部分代码:从上到下:警报成功打印出来:

Array content: shoes,clothes,watches

shoes

clothes

watches

该警报只是为了确认 results2 是一个工作数组。 现在,如何对返回值/数组进行编码,以便能够在模板中使用它,就好像它是由 db.dbName.find() 查询返回的游标一样?

感谢您的帮助。

最佳答案

您的问题与数组无关,而是关于同步与异步编程。正如 @mutdmour 提到的,空格键可以很好地处理来自助手的数组。

在渲染模板时,助手可能会被多次调用,因此它不应该执行任何异步操作或产生任何副作用。您的助手正在进行异步调用,因此这是一个立即出现的问题。

您看到的问题是这样的调用是异步的,而助手需要同步。所以你很难让你的助手按原样工作。

在许多情况下,助手返回集合的内容,或返回指向集合内容的游标。我不了解您的应用程序,但是带有集合内容的发布/订阅是更好的选择吗?

如果不是,并且它必须是方法调用的结果,那么通常我会:

  1. 在 onCreated() 中进行调用
  2. 将结果写入响应式变量
  3. 从助手返回响应式变量

例如

Template.Foo.onCreated(function() {
    let self = this;
    self.clothing = new ReactiveVar();

    Meteor.call('getUserCategoryArray', function(error, results) {
        if (!error) {
            // or whatever you need to do to get the results into an array
            self.clothing.set(results);
        }
    });
});

Template.Foo.helpers({
    clothing() {
        return Template.instance().clothing.get();
    }
});

关于javascript - 如何返回数组/值作为可以在模板中使用的光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367161/

相关文章:

javascript - 我的 DOM 中的 Google Analytics(分析)像素在哪里?

javascript - 类型错误 : Cannot read property 'name' of undefined

javascript - ES6 map 功能支持 - IE11 中的支持太大了吗?

javascript - JavaScript 中的字节计数

javascript - Meteor:使用在帮助器中定义的光标来处理同一模板的事件

javascript - 匹配数组中的值并从函数返回另一个数组

python - 如何使用numpy的einsum来获取子数组的点积?

javascript - for 循环将最后提取的数据集添加到数组中的每个位置

python - 理解 NumPy 的 einsum

javascript - 登录表单消失了? meteor 教程