【发布时间】:2021-12-30 08:17:55
【问题描述】:
在我的控制器中,我有这个方法可以渲染一个标记文件,将一个对象发送到带有数据的视图(dataView)
export const renderRecoveryData = (
req: Request | any,
reply: ResponseToolkit,
callback: any
): void => {
const dataView: { [key: string]: any } = {
id: 1,
info: getInfo(req, reply, callback),
};
templateEngine.renderFromTemplate(
"./views/private/info/info.marko",
dataView,
req,
reply,
);
};
在“信息”属性中,我想使用以下方法加载一个对象,该对象从调用两个服务中获取数据:
const getInfo = (req: Request | any, reply: any, callback: any): void => {
const headers = helpers.setHeaders(req);
const idNumber = req.yar.get('idNumber');
async.parallel({
personalData: (callback: any) => infoService.personalInfo(idNumber, headers, callback),
addionalInfo: (callback: any) => infoService.addicionalInfo(headers, callback),
}, (err: any, responses: any) => {
if (err) {
return callback(err);
}
console.log("response", responses);
return responses;
});
};
console.log 正确地向我显示了我想要保存在“dataView”的“info”属性中的对象,但是当我检查视图获取的内容时,“info”属性没有显示,它只是显示“id”属性
我从路由文件中调用“renderRecoveryData”:
server.route({
method: "GET",
path: "/{locale}/private/info/dashboard/step1",
handler: renderRecoveryData,
});
可能是什么问题?谢谢
【问题讨论】:
-
发生这种情况是因为
getInfo是异步函数,您必须在调用它时使用await或在getInfo的回调中渲染模板。其他问题是您没有在成功的情况下调用回调(请将return responses替换为return callback(null, responses))。 -
我正在测试你的推荐,谢谢
-
我通过详细的代码更改添加了答案。我希望它会有所帮助。
标签: javascript node.js typescript