Node Express Handlebars帮助程序未返回函数的结果
Node Express Handlebars helper not returning result of function
我对此感到困惑。如果我在一个手把助手中使用一个函数并返回该函数的结果,则不会返回任何结果。
这是模板:
<ul>
<li>{{formatid this.id}}</li>
</ul>
这里是帮助者:
formatid : function(id){
mOrders.formatOrderID(id, function(err, formatted_id){
// err is always null, no need to handle
console.log(formatted_id);
return formatted_id;
});
}
然而,尽管正确的文本被记录到控制台,结果的html是:
<ul>
<li></li>
</ul>
然而,如果我在formatOrderID()函数结束后放了一个返回,它就会被返回,所以这个:
formatid : function(id){
mOrders.formatOrderID(id, function(err, formatted_id){
// err is always null, no need to handle
console.log(formatted_id);
return formatted_id;
});
return 'some_text';
}
给我以下html:
<ul>
<li>some_text</li>
</ul>
我在这里错过了什么?它不是返回的格式化字符串,因为即使我在回调中返回字符串,它也会被忽略。
问题是您试图从异步函数返回一个值,但handlerbars助手是同步的。当mOrders.formatOrderID()
中传递的回调被执行时,您的助手函数已经退出(值为undefined
,因为在第一个示例中您没有返回回调之外的任何内容,在第二个示例中使用'some_text'
)。
一种解决方案是使mOrders.formatOrderID
是同步的(如果可能或可行的话),或者使用类似express hbs的库,并定义这样的异步助手:
var hbs = require('express-hbs');
hbs.registerAsyncHelper('formatid', function(id, cb) {
mOrders.formatOrderID(id, function(err, formatted_id){
// err is always null, no need to handle
console.log(formatted_id);
cb(formatted_id);
});
});
相关文章:
- JScript 错误: 无法分配给函数结果
- 显示基于javascript函数结果的HTML代码
- 访问来自另一个函数的函数结果
- 将函数结果传递给Javascript中的另一个函数变量
- NaN作为函数结果而不是必需的整数出现问题
- 更改javascript更改函数结果的颜色
- 从函数结果中检测三角函数
- 根据函数结果使用 JavaScript 更改图像
- 如何返回函数结果并将它们设置为标记的内部 HTML
- JavaScript 如何将函数结果与数组中的值一起传递到同一个函数中
- 用
标记包装 JQuery 函数结果
- 节点函数结果未定义
- 使用Cheerio和Response for Node web scraper,将响应函数结果传递给视图
- 在所有项目javascript中显示函数结果
- 平板电脑友好的悬停工具提示,显示基于javascript函数结果的动态文本
- 在机器时间更改后立即更新Date()函数结果
- 屈服函数结果
- 如何在JavaScript中处理异步函数结果
- 声明和定义全局变量作为函数结果有时有效
- Jquery&函数结果,作为属性名称