我对我的承诺如何在我的node.js Web应用程序中工作面临一些困惑。承诺在我的节点JS应用程序中无法正常工作
let arrayPics = [];
let conv =()=>{
return new Promise((resolve,reject)=>{
let check=converter.convert(req);
if(check)
resolve('Conversion');
else
reject();
});
};
let enc = (message)=>{
return new Promise((resolve,reject)=>{
let check = encode.encoder(arrayPics);
if(check)
resolve(message + ' and Encoding to Base 64!');
else
reject();
});
};
conv().then((result)=>{
return enc(result);
}).then((result)=>{
console.log('Finished '+result);
console.log(arrayPics[4]);
return res.redirect('/ViewDoc');
});
所以基本上我的第一个承诺是运行一个脚本来转换PDF和TIFF文件文件单独在一个临时文件夹PNG文件。然后第二个promise会运行一个脚本将png转换为64位并将其存储在一个动态数组中。当我消耗的承诺我得到的输出是这样的:
{ title: '' }
{ fieldname: 'upl',
originalname: 'multipage_tiff_example.tif',
encoding: '7bit',
mimetype: 'image/tiff',
destination: 'uploads/',
filename: 'multipage_tiff_example.tif',
path: 'uploads\\multipage_tiff_example.tif',
size: 810405 }
Finished Conversion and Encoding to Base 64!
undefined
POST/302 181.742 ms - 60
GET /ViewDoc 304 8.564 ms - -
Converted!
我们可以看到的console.log(arrayPics [4])输出出来为未定义。但是当我在调试代码时运行相同的代码时,我得到以下输出。
Debugger listening on [::]:54395
Server is listening on: 3000
GET/304 35.525 ms - -
{ title: '' }
{ fieldname: 'upl',
originalname: 'multipage_tiff_example.tif',
encoding: '7bit',
mimetype: 'image/tiff',
destination: 'uploads/',
filename: 'multipage_tiff_example.tif',
path: 'uploads\\multipage_tiff_example.tif',
size: 810405 }
Finished Conversion and Encoding to Base 64!
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAIAAAAVFBUnAAAABGdBTUEAAL.......
Converted!
我们可以看到现在我们得到了console.log(arrayPics [4])的输出。这是我感到困惑的部分,为什么我的代码的行为如此。我也张贴了我的剧本,我的承诺使用,供您参考:
文档转换器SCRIPT:
module.exports = {
convert: function pdfConverter(req)
{ let check = true;
gm(req.file.path).write('Images/output.png', (err)=>
{
if(err)
{
console.log(err);
reject(err);
check = false;
}
else
{
console.log("Converted!");
}
});
return check;
}
};
Base64编码
module.exports = {
encoder: function base64_encoder(arrayPics)
{
let files = fs.readdirSync('Images/');
for(let i in files)
{
//console.log('C');
arrayPics.push(base64Img.base64Sync('Images/output-' + i + ".png"));
}
return true;
}
};
,如果我能我将不胜感激得到一些关于为什么会发生这种情况的建议以及我可以对我的代码进行的任何更改。
您需要在'convert'函数中加入'new Promise'调用 – Bergi