最近我在撇号中使用了很多小工具,并遇到了一些小工具助手的问题。我在我的小部件上有一个帮助器,它检查不同对象上的一些字段,以确定它是否应该在页面上显示它自己。但是,我注意到一个奇怪的问题 - 它看起来像我尝试加载某些模块时,助手不会等待异步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方法在返回之前完成,但我可能完全错误。
谢谢!
正确的答案正在扩大它的一个例子,但也许不是最好的例子,因为在那个例子中,'pageBeforeSend'方法提供不带回调。只是要清楚,它可以接受'(req,callback)'而不是'(req)',在这种情况下,你的异步代码应该通过调用'callback(null)'来结束。 (通常,如果您没有看到回调作为函数的参数,那么没有理由期待它会等待异步代码运行。) –