[英]Return call is not working in Node.js with Express
我的 crud.js 代碼塊如下,
const listall = () => {
return client.connect(() => {
return client.invoke("ZSD_CP_PRICE_GET_ALL", {}, (err, res) => {
if (err) {
console.log('error in invoke', err);
}
console.log("ZSD_CP_PRICE_GET_ALL", res);
return res;
});
});
}
我的 viewpage.js 代碼塊如下,
router.get('/', function(req, res) {
res.render('viewpage', {title: 'SAP', data: sapview.listall()})
})
module.exports = router;
我的 viewpage.jade 代碼塊如下,
extends layout
block content
h1= title
p Welcome to #{title}
p Data #{data}
當我運行節點應用程序終端時,會記錄如下結果,
ZSD_CP_PRICE_GET_ALL {
IS_RETURN: {
TYPE: ''
}
但是 res 永遠不會像我在 crud.js 文件中的 console.log 塊之后的“返回 res”中提到的那樣返回
client.connect()
是異步的; 您無法獲得您調用的任何其他異步代碼(例如client.invoke
)的實際返回值。
我建議承諾調用,
const listall = () => {
return new Promise((resolve, reject) => {
client.connect(() => {
client.invoke("ZSD_CP_PRICE_GET_ALL", {}, (err, res) => {
if (err) {
return reject(err);
}
resolve(res);
});
});
});
};
然后在異步函數中獲取數據:
router.get("/", async (req, res) => {
const data = await sapview.listall();
res.render("viewpage", { title: "SAP", data });
});
(進一步的重構將涉及一個通用的承諾“調用方法”函數。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.