我正在使用一些等待/异步功能。因此,我具有以下功能,pdfData
与undefined
永无不同;我想做的是,在创建pdf文件的所有过程之后,用s3对其进行签名,然后将其上传到s3,然后将其从temp文件夹中删除,以返回状态和要下载的网址。
有人可以让我知道我在想什么吗?
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);
答案 0 :(得分:1)
我看到Promise(或async-await)配方与回调配方混合在一起。不要。
toFile
是否兑现承诺?如果是这样,那么我们已经差不多了: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);
toFile
不返回承诺,则需要使用promisify
库或手动来实现承诺。基本上看起来像这样: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);
}
})
});
现在,toFilePromise
可以等待。之后,您可以提取文件名,await signS3(
等。