撇号小部件助手不等待 Return

Apostrophe Widget Helper Not Waiting to Return

最近我一直在使用 Apostrophe 中的小部件进行大量工作,并且 运行 遇到了小部件助手的一些问题。我的小部件上有一个助手,它检查不同对象的某些字段以确定它是否应该在页面上显示。但是,我注意到一个奇怪的问题 - 看起来每当我尝试加载一些模块时,助手都没有等待 async toArray 方法在 returning 之前完成。所以,当我有下面的代码时:

    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;
            })
        }
    })

实际上 return 模板没有任何内容。但是,当我 return toArray 之外和函数顶层内的任何值时,它会 return 我设置的值。有没有办法解决?我假设该方法没有等待 toArray 方法在 returning 之前完成,但我可能完全错了。

谢谢!

助手是同步执行的,你做异步工作的最后机会是提供一个 pageBeforeSend 函数。

http://apostrophecms.org/docs/technical-overviews/how-apostrophe-handles-requests.html#code-page-before-send-code-your-last-chance-to-do-async-work-for-a-page

这是使用 super 模式扩展的示例 https://github.com/punkave/apostrophe/blob/1c0b977470a81caec7a98146db4dbd46167f6ee4/lib/modules/apostrophe-pieces-pages/index.js#L387