我尝试了多种让我的函数返回参数的变体,以便我只能在一个步骤完成时运行我的函数,但寻找一种不会让我陷入回调 hell 的最佳方法。
我有以下功能
function convertPdfToImage(fileName) {
return new Promise((resolve, reject) => {
var pdfImage = new PDFImage(fileName+".pdf");
pdfImage.convertFile().then(function (imagePaths) {
var file = fs.createWriteStream(imagePaths);
file.end();
file.on("finish", () => { resolve(true); });
file.on("error", reject);
return resolve(true)
});
});
}
我在这里这样称呼:
Promise.all([convertPdfToImage('test2'), convertPdfToImage('test1')])})
.then(function () {
compareItems(codeId);
});
这是PromiseAll中调用的方法
function convertPdfToImage(env: string, shareClassId: string[]) {
return new Promise((resolve, reject) => {
var pdfImage = new PDFImage("output/" + shareClassId + env + ".pdf");
pdfImage.convertFile().then(function (imagePaths) {
var file = fs.createWriteStream(imagePaths);
file.end();
file.on("finish", () => { resolve(true); });
file.on("error", reject);
return resolve(true)
});
});
}
无论我尝试什么,我都无法保证compareItems在convertPdfToImage之后运行(PromiseAll已解决)
最佳答案
您可能没有正确实现 promise ,
function convertPdfToImage(fileName) {
let pdfImage = new PDFImage(fileName+".pdf");
return pdfImage.convertFile().then(function (imagePaths) {
let file = fs.createWriteStream(imagePaths);
file.end();
file.on("finish", () => { resolve(true); });
file.on("error", reject);
return true
}).catch(err){
console.log(err);
}
}
此外,使用 async/await,
async function convertPdfToImage(fileName) {
let pdfImage = new PDFImage(fileName+".pdf");
try{
const imagePaths = await pdfImage.convertFile();
let file = fs.createWriteStream(imagePaths);
file.end();
file.on("finish", () => { resolve(true); });
file.on("error", reject);
return true
} catch(err){
console.log(err);
}
}
另外,请参阅此 question
关于Javascript Promise 无法解析 createWriteStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60427771/