使用 NodeJS 承诺等待转换过程完成

时间:2021-05-11 15:46:46

标签: node.js asynchronous async-await promise

我已经尝试了 1 周没有成功通过此 nodejs 模块呈现 psd 转换:https://www.npmjs.com/package/psd 尝试在转换所有图像后显示确认消息。 我不知道问题是否可以追溯到我的代码或承诺合规性,我已经尝试了 50 次来更改此代码的各个方面。

在 psdconverter.js 文件中

//! PSD COMPONENT MODULES
var PSD = require('psd');
//! file and extension MODULES
const fs = require('fs');
var path = require('path');


const PSDconverter = async (filename) => {
  return new Promise((resolve, reject) => {
    PSD.open('./img/' + filename).then(function (psd) {
      let newfilename = filename.replace(/.psd/i, ""); //REPLACE CASE INSENSITIVE
      psd.image.saveAsPng('./img/' + newfilename + '.png');
      return newfilename;
    }).then(function (res) {
      console.log('PSD Conversion Finished!' + res);
      resolve(res);
    }).catch(function (err) {
      console.log(err);
    });
  })
}


const EnumAndConvert = async () => {
  return new Promise((resolve, reject) => {
    //! READ DIR IMAGE AND CONVERTION PART
    fs.readdir('./img/', (err, files) => {
      if (err)
        console.log(err + ' errore di conversione, non è stata trovata la cartella img!');
      else {
        for (let filename of files){
          var ext = path.extname('./img/' + filename);
          if (ext === '.PSD' || ext === '.psd')
          await PSDconverter(filename);
        }

      }
    })
    resolve("Everything is converted successfully");   

  })
  
}
exports.PSDconverter = PSDconverter;
exports.EnumAndConvert = EnumAndConvert;

在 index.js 文件中

function PSDconverter() {
  //! convertitore PSD
  let EnumPSDAndConvert = require('./psdconverter.js');
  EnumPSDAndConvert.EnumAndConvert().then((res) => {  //dopo che è ritornata la Promise risolta continuo
    console.log(res+"ciao");
  })
}

错误结果: 等待PSDconverter(文件名); ^^^^^

语法错误:await 仅在异步函数中有效

当我希望第一个成为最后一个时。 谢谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

好的解决方案是: index.js

function PSDconverter() {
  //! convertitore PSD
  let EnumPSDAndConvert = require('./psdconverter.js');
  EnumPSDAndConvert.EnumAndConvert().then(() => { 
    console.log("Conversion Completed");
  })
}

psdconverter.js

//! PSD COMPONENT MODULES
var PSD = require('psd');
//! file and extension MODULES
const fs = require('fs');
var path = require('path');


const PSDconverter = (filename) => {  //without async 
  return PSD.open('./img/' + filename).then(function (psd) {
    let newfilename = filename.replace(/.psd/i, ""); //REPLACE CASE INSENSITIVE
    psd.image.saveAsPng('./img/' + newfilename + '.png');
    return newfilename;
  }).then(function (res) {
    console.log('PSD Conversion Finished!' + res);
  }).catch(function (err) {
    console.log(err);
  });
}

function readImgDir() {
  return new Promise((resolve, reject) => {
    fs.readdir('./img/', (err, files) => {
      if (err)
        console.log(err + ' errore di conversione, non è stata trovata la cartella img!');
      else {
        resolve(files);
      }
    })
    
  })
}
const EnumAndConvert = async () => {
  var files = await readImgDir();   //! READ DIR IMAGE AND CONVERTION PART
  for (let filename of files) {
    var ext = path.extname('./img/' + filename);
    if (ext === '.PSD' || ext === '.psd')
      await PSDconverter(filename);
  }

}
exports.PSDconverter = PSDconverter;
exports.EnumAndConvert = EnumAndConvert;

如果有关于如何改进代码的任何建议,我会很好奇。 再次感谢

相关问题