Javascript 在采取任何行动之前,如何适当地等待回报?

Javascript 在采取任何行动之前,如何适当地等待回报?,javascript,Javascript,我正在处理一些等待/异步函数。因此,我有以下函数,pdfData与undefined没有区别;我想做的是,在创建pdf文件的所有过程之后,使用s3对其进行签名,将其上载到s3,然后将其从临时文件夹中删除,以返回要下载的状态和url 谁能告诉我我错过了什么 const pdfData = await pdf .create(content, options) .toFile(`./src/services/temp/${fileName}`, async function(error, r

我正在处理一些等待/异步函数。因此,我有以下函数,
pdfData
undefined
没有区别;我想做的是,在创建pdf文件的所有过程之后,使用s3对其进行签名,将其上载到s3,然后将其从临时文件夹中删除,以返回要下载的状态和url

谁能告诉我我错过了什么

const pdfData = await pdf
  .create(content, options)
  .toFile(`./src/services/temp/${fileName}`, async function(error, result) {
    if (error) return console.log(error);

    const file = result.filename;
    // requestSignS3
    const awsSign = await signS3(
      `statements/${fileName}`,
      "application/pdf"
    );
    // upload document to S3
    const uploadStatus = await uploadDocumentToS3(awsSign, file);
    // delete file from temp folder
    fs.unlink(file, err => {
      if (err) throw err;
    });
    // set data to return
    const data = {
      status: uploadStatus,
      url: awsSign.url
    };

    return data;
  });

console.log(pdfData);
我看到promise(或AsyncWait)配方与回调配方混合在一起。不要

  • toFile
    是否返回承诺?如果是这样的话,那么我们几乎已经做到了:
  • 如果
    toFile
    未返回承诺,则需要使用
    promisify
    库或手动对其进行承诺。基本上是这样的:

  • 现在,
    toFilePromise
    是可以期待的。之后,您可以提取文件名,
    等待签名3(
    ,等等。

    只是一个健全性检查问题……您的
    等待pdf…
    是否在异步函数中?是的,所有这些函数都在try-catch中??try/catch不是异步函数很抱歉try-catch包装在异步函数中,所以我使用
    html-pdf
    将把手渲染为pdf和
    。toFile
    我可以看到包含两个参数的导出接口CreateResult{toBuffer(回调:(err:Error,buffer:buffer)=>void):void;toFile(回调:(err:Error,res:FileInfo)=>void):void;toFile(filename?:string,callback?:(err:Error,res:FileInfo)=>void):void;toStream(回调:(err:Error,stream:fs.ReadStream)=>void):void;}编辑了更多详细信息。
    const pdfFile = await pdf
      .create(content, options)
      .toFile(`./src/services/temp/${fileName}`);
    
    const pdfData = await /* everything async you want to do with pdfFile goes there */(pdfFile);
    
    const toFilePromise = new Promise(function(reject, resolve) => {
        pdf.create(content, options)
            .toFile(`./src/services/temp/${fileName}`, function(error, result) {
                if (error) {
                    reject(error);
                } else {
                    resolve(result);
                }
            })
    });