gpt4 book ai didi

javascript - Node Express Handlebars 助手不返回函数结果

转载 作者:行者123 更新时间:2023-11-29 21:51:05 25 4
gpt4 key购买 nike

我对这个感到困惑。如果我在 handlebars helper 中使用函数并返回该函数的结果,则不会返回任何内容。

这是模板:

<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() 函数结束后放置一个 return,它就会被返回,所以这样:

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>

我在这里错过了什么?它不是返回的格式化字符串,因为即使我在回调中返回一个字符串,它也会被忽略。

最佳答案

问题是您正试图从异步函数返回一个值,但 handlebars 助手是同步的。在 mOrders.formatOrderID() 中传递的回调被执行时,您的辅助函数已经退出(值为 undefined,因为您没有在回调之外返回任何内容第一个示例,第二个示例中使用 'some_text')。

一个解决方案是使mOrders.formatOrderID 同步(如果可能或可行)或使用类似express-hbs 的库并定义 asynchronous helpers像这样:

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

关于javascript - Node Express Handlebars 助手不返回函数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29197604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com