问题描述
第一个问题。从StackOverflow中学到了很多年。只是想不通。
我试图把我的头放在回调,promise和async / await上-我只是没有看到它。有人可以请帮助吗?
我只是做不到: 1 ,然后 2 ,然后 3 。
- 下载PDF
- 将PDF转换为JPG
- 删除PDF
use std::io
解决方法
传统方式是在回调中继续执行。要使代码正常工作,需要进行最小修改:
function getPdf() {
var file = fs.createWriteStream(orderNo+ ".pdf");
http.get(targetUrl+token,function(response) {
response.pipe(file);
console.log('downloaded');
makeJpgs(); // CONTINUED HERE!
});
}
function makeJpgs() {
//
exec("magick -density 150 -quality 100% " + orderNo + ".pdf " + previewpath + orderNo + ".jpg",function (err) {
if (err) {
console.error(err);
}
else {
deletePdf(); // CONTINUED HERE!
}
});
console.log('converted');
}
function deletePdf() {
fs.unlink(orderNo+ ".pdf",(err) => {
if (err) {
console.error(err); // You can't really throw asynchronously
}
else {
// Deletion process completes here.
console.log('deleted');
}
});
// console.log('deleted'); // Note: The file haven't even started being deleted here
}
getPdf();
使用Promises,您可以使代码更具可读性:
const util = require('util');
const http = require('http');
const fs = require('fs');
const child_process = require("child_process");
const targetUrl = 'http://domain/fileProxy.ashx?token=';
const previewpath = 'previews/';
var token = '66a7e572-e2fb-4fb4-87a9-6e19d675357f';
var orderNo = '121212';
const exec = util.promisify(child_process.exec);
const unlink = util.promisify(fs.unlink);
const get = function (url) {
return new Promise(function(ok,fail){
http.get(targetUrl+token,function(response) {
response.pipe(file);
ok();
})
.on('error',fail);
});
}
function getPdf() {
var file = fs.createWriteStream(orderNo+ ".pdf");
return get(targetUrl+token);
}
function makeJpgs() {
return exec("magick -density 150 -quality 100% " + orderNo + ".pdf " + previewpath + orderNo + ".jpg");
}
function deletePdf() {
return unlink(orderNo+ ".pdf",(err) => {
if (err) {
throw err;
}
});
}
getPdf().then(function(){
console.log('downloaded');
return makeJpgs();
}).then(function(){
console.log('converted');
deletePdf();
}).then(fuction(){
console.log('deleted');
});
现在您的函数返回了承诺,您可以使用async / await:
async function main () {
await getPdf();
console.log('downloaded');
await makeJpgs();
console.log('converted');
await deletePdf();
console.log('deleted');
}
main().then('done');