【问题标题】:Netlify Function Not Completing Before Console LogNetlify 功能未在控制台日志之前完成
【发布时间】:2021-04-30 00:16:10
【问题描述】:

我一直在编写一个脚本,使用 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...”之后的任何日志都没有显示。我做错了什么?

【问题讨论】:

    标签: javascript asynchronous aws-lambda serverless netlify


    【解决方案1】:

    您需要在异步函数的上下文中使用 await,以便等待 pdf2base64() 函数调用的结果。否则主函数将比你的 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”。也使代码更易于阅读。如果您有更复杂的流程,则没有嵌套地狱。只是看起来线性的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 2015-10-05
      • 2011-10-14
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多