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);
}
})
});