[英]Node js Async/Await and return not working as expected
我正在嘗試使用 node express 構建一個簡單的報表服務器。 但是,它沒有按預期運行。
這是我的 api 端點生成報告:
router.post('/test', async function (req, res) {
return res.json(await reportService.test());
});
這是服務層:
var pdf = require("pdf-creator-node");
var fs = require("fs");
var path = require("path");
var base64Util = require("../utils/base64util");
async function test() {
var html = fs.readFileSync(path.join(__dirname, "../templates/test.html"), "utf8");
var options = {
format: "A3",
orientation: "portrait",
border: "10mm",
header: {
height: "45mm",
contents: '<div style="text-align: center;">header</div>'
},
footer: {
height: "28mm",
contents: {
first: 'Cover page',
2: 'Second page',
default: '<span style="color: #444;">{{page}}</span>/<span>{{pages}}</span>',
last: 'Last Page'
}
}
};
var users = [{
name: "Shyam",
age: "26",
},
{
name: "Navjot",
age: "26",
},
{
name: "Vitthal",
age: "26",
},
];
var document = {
html: html,
data: {
users: users
},
path: path.join(__dirname, "../reports/test.pdf"),
type: "",
};
pdf
.create(document, options)
.then(async (res) => {
logger.info("Report Generated: " + res.filename);
let base64 = await base64Util.convert("../reports/test.pdf");
return {
success: true,
url: res.filename,
base64: base64
};
})
.catch((error) => {
logger.error(error);
return {
success: false
};
});
}
module.exports = {
test
}
這是 pdf 到 base64 的轉換方法:
const pdf2base64 = require('pdf-to-base64');
var path = require("path");
async function convert(filePath){
pdf2base64(path.join(__dirname, filePath))
.then(
(response) => {
return response;
}
)
.catch(
(error) => {
logger.log(error);
return false;
}
)}
module.exports = {
convert
}
我想在生成 pdf 然后將其轉換為 base64 后發送響應。 但它沒有返回任何東西。
您的test
function 需要返回一些東西。 在pdf.create(document...)
之前添加一個return
你的test
方法不會等待任何東西,因為你沒有告訴它。 它也不返回任何東西。 在您的pdf
promise 前面添加return
:
return pdf
.create(document, options)
...
這同樣適用於pdf2base64
調用。
function convert(filePath) {
return pdf2base64(path.join(__dirname, filePath))
...
}
此外,您將這些方法指定為async
,但實際上並沒有使用 async/await 承諾。 你可以擺脫它們,傳統的Promises
不需要它們。
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.