Meteor:如何遍历一个数组,这是一个异步方法的结果

Meteor: how to loop over an array which is the result of an asynchronous method

本文关键字:一个 异步方法 结果 数组 何遍历 遍历 Meteor      更新时间:2023-09-26

我有一个异步方法,它执行Facebook请求从当前登录用户那里检索照片。

我有一个模板,我可以在其中循环访问这些结果。但由于对Facebook的调用是异步的,所以它失败了。

    <template name="mytemplate">
        {{#if photos}}
            {{> images pics=photos}}
        {{/if}}
    </template> 
    <template name="images">
        {{#with pics}}
            {{#each this}}
                {{images}}
            {{/each}}
        {{/with}}
    </template>

这是我的javascript:

      Template.mytemplate.helpers({
      photos: function () {
          return Template.instance().myAsyncValue.get();
      }
  });
  Template.mytemplate.created = function (){
      var self = this;
      self.myAsyncValue = new ReactiveVar("Waiting for response from server...");
      Meteor.call('getPhotos', function (err, data) {
          if (err)
              console.log(err);
          else 
              self.myAsyncValue.set(data.data);
      });
  }  

我已经有一个正在监视的变量,但问题是我的模板已经创建并且结果还不是数组。

有人可以向我展示如何在模板中使用异步数组结果的最佳实践吗?我想在模板中创建图像标签,而不是使用 jquery 或 javascript。

谢谢

如果我理解正确,则在加载帮助程序时会出现错误,因为照片不是数组。试试这个:

  Template.mytemplate.helpers({
  photos: function () {
      var val = Template.instance().myAsyncValue.get();
      return val.constructor === Array && val;
  }

作为附带的问题,为什么要对数组使用 ReactiveVar?我只找到了在原语上使用它们的用途,因为反应性不会进行深度扫描,但也许我错过了:)

感谢您的快速回复。

在我写完问题后,我已经发现我的问题是在尚未进行调用时没有给出实际的数组。

关于你的侧面问题。我必须使用此 ReactiveVar 来跟踪结果,不是吗?因为我的变量首先没有值。模板已在设置中。然后,当我得到响应时,值发生了变化,我的每个循环都会对收到的数组做出反应。无论如何,这就是我对这个 ReactiveVar 的理解:)