Node Express Handlebars帮助器不返回功能结果

时间:2015-03-22 17:37:03

标签: javascript node.js express helper handlebars.js

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

以下是模板:

<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>

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

1 个答案:

答案 0 :(得分:2)

问题是你试图从异步函数返回一个值,但是把手助手是同步的。当mOrders.formatOrderID()中传递的回调被执行时,你的助手函数已经退出(值为undefined,因为你在第一个例子中没有返回回调之外的任何东西,而{{1}在你的第二个例子中)。

一种解决方案是让'some_text'同步(如果可能或可行)或使用像express-hbs这样的库并定义asynchronous helpers,如下所示:

mOrders.formatOrderID