在我的控制器中,我有這個方法來呈現一個標記檔案,將一個物件發送到帶有資料的視圖(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,
});
可能是什么問題?謝謝
uj5u.com熱心網友回復:
我在代碼中看到兩個問題:
getInfo是異步函式,在控制器中呼叫它時沒有添加回呼/等待。getInfo函式成功時不會呼叫回呼。
將代碼更改為如下所示的內容應該可以:
export const renderRecoveryData = (
req: Request | any,
reply: ResponseToolkit,
callback: any
): void => {
getInfo(req, reply, (err, info) => {
if(err) {
// Handle error
}
const dataView: { [key: string]: any } = {
id: 1,
info,
};
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 callback(err, responses);
});
};
uj5u.com熱心網友回復:
我認為問題在于您回傳回應的方式,我認為您應該將回應傳遞給回呼
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),
},
callback // this is better
);
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/398163.html
標籤:javascript 节点.js 打字稿
