我一直在编写一个脚本,使用PDF包将从表单上传的pdf2base64转换为Base64字符串,以便上传到api.
我从上传的PDF中获取url,并将其传递到我上面提到的包中,以便将其转换为正确的格式。
我的代码看起来像这样:
const pdf2base64 = require('pdf-to-base64')
const createPayload = (name, email, pdf) {
return {
firstName: name,
email: email,
pdf: {
name: pdf.filename,
mimeType: pdf.type,
fileContent: '', // This will be replaced with a base64 string
}
}
}
exports.handler = async function( event, context ) {
const formData = JSON.parse(event.body).payload
if (formData.form_name == 'pdf-form') {
console.log("Processing PDF...")
const submission = createPayload(formData.data)
const pdfUrl = formData.data.resume.url
pdf2base64(pdfUrl)
.then( (response) => {
const result = response;
submission.pdf.fileContent = result;
console.log(submission)
return response
})
.catch( (error) => console.log(error))
}
}但是,当我运行脚本时,我的控制台只记录以下内容。
9:43:59 AM: 2021-01-26T07:43:59.806Z 608332cc-be83-4243-b986-05d6e7e5b0f0 INFO Processing PDF...
9:43:59 AM: Duration: 71.86 ms Memory Usage: 70 MB Init Duration: 132.10 ms 如你所见,"Processing PDF...“之后的任何日志都不会出现。我做错了什么?
发布于 2021-01-27 00:04:49
您需要在异步函数的上下文中使用await,以便等待pdf2base64()函数调用的结果。否则,main函数将比pdf2base64函数完成得更快。
exports.handler = async function( event, context ) {
const formData = JSON.parse(event.body).payload
if (formData.form_name == 'pdf-form') {
console.log("Processing PDF...")
const submission = createPayload(formData.data)
const pdfUrl = formData.data.resume.url
try {
const result = await pdf2base64(pdfUrl);
return result;
} catch(error) {
console.log(error);
}
}
}有关异步/等待的更多信息,请访问:https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
作为一条经验法则。如果你将你的函数标记为async,只需使用await而不是"then/catch“。也使得代码更容易阅读。如果你有更复杂的流程,就不会嵌套地狱。只是代码看起来是线性的。
https://stackoverflow.com/questions/65897522
复制相似问题