2017-10-16 52 views
0

最近我在撇号中使用了很多小工具,并遇到了一些小工具助手的问题。我在我的小部件上有一个帮助器,它检查不同对象上的一些字段,以确定它是否应该在页面上显示它自己。但是,我注意到一个奇怪的问题 - 它看起来像我尝试加载某些模块时,助手不会等待异步toArray方法在返回之前完成。所以,当我有下面的代码:撇号小工具助手不等待退货

self.addHelpers({ 
     familyMembers: function() { 
      var userId = "set from context"; 

      var userModule = self.apos.modules['apostrophe-users'].find(req, {_id: userId}).permission(false); 

      userModule.toArray(function (err, arr) { 
       var showMe = false; 

       if (some_condition) { 
        showMe = true; 
       } 

       return showMe; 
      }) 
     } 
    }) 

它实际上不会返回任何内容到模板。但是,当我将任何值返回给toArray之外并且在函数的顶层内部时,它确实会返回我设置的值。有没有办法解决?我假设该方法并未等待toArray方法在返回之前完成,但我可能完全错误。

谢谢!

回答

2
+1

正确的答案正在扩大它的一个例子,但也许不是最好的例子,因为在那个例子中,'pageBeforeSend'方法提供不带回调。只是要清楚,它可以接受'(req,callback)'而不是'(req)',在这种情况下,你的异步代码应该通过调用'callback(null)'来结束。 (通常,如果您没有看到回调作为函数的参数,那么没有理由期待它会等待异步代码运行。) –