Netlify 函数在控制台日志之前未完成
Netlify Function Not Completing Before Console Log
我一直在编写一个脚本,使用 pdf2base64 npm 包将从表单上传的 PDF 转换为 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
如您所见,“正在处理 PDF...”后的任何日志都没有显示。我做错了什么?
您需要在异步函数的上下文中使用 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);
}
}
}
您可以在 async/await 阅读更多内容:
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
根据经验。如果您将函数标记为异步,只需使用 await 而不是“then/catch”。也使代码更容易阅读。如果你有更复杂的流程,就没有嵌套地狱。只是看起来线性的代码。
我一直在编写一个脚本,使用 pdf2base64 npm 包将从表单上传的 PDF 转换为 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
如您所见,“正在处理 PDF...”后的任何日志都没有显示。我做错了什么?
您需要在异步函数的上下文中使用 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);
}
}
}
您可以在 async/await 阅读更多内容: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
根据经验。如果您将函数标记为异步,只需使用 await 而不是“then/catch”。也使代码更容易阅读。如果你有更复杂的流程,就没有嵌套地狱。只是看起来线性的代码。