javascript - Meteor:如何循环遍历作为异步方法结果的数组

标签 javascript facebook asynchronous meteor

我有一个异步方法,可以执行 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?我只发现在基元上使用它们的用途,因为 react 性不会进行深度扫描,但也许我错过了:)

关于javascript - Meteor:如何循环遍历作为异步方法结果的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28970570/

相关文章:

java - 检查 facebook 用户是否从 java 中的服务器端连接到应用程序

node.js - 在 Node.js 中使用 Promise 会使 Node 同步吗?

javascript - ChartJS 不断将 Canvas 大小调整为默认大小

javascript - 列出 (Angular.js) 中的对象

javascript - 在之前的 Canvas 上绘制一个旋转圆

ruby-on-rails - 如何在多个环境中处理 OmniAuth 回调?

facebook - 如何更新 facebook open graph 图片

javascript - 如何创建一个返回等待 EventEmitter 的 Promise 的函数?

java - Spring中的@Async在Service类中不起作用?

JavaScript ES2017 : Nested async await in a class