Return node.js 模块中的承诺

Return a promise in a node.js module

我想 return convertToHtml 处理后的数据,但它只是 return 转换过程结束前的数据。关于如何实施它有什么建议吗?

exports.extractData = async function(path) {
    var mammoth = require("mammoth");
     return await mammoth.convertToHtml({path: path}, options)
            .then(function(result) {
                var html = result.value; 
                var messages = result.messages; 
                return html;
    }
}

根据建议我改为:

exports.extractData = async function(path) {
    var mammoth = require("mammoth");
     const aux = await mammoth.convertToHtml({path: path}, options);
     return aux.value;
    }
}

然而,我得到:

Promise { <pending> }

我这样调用模块:

var x = require("./index");
console.log(x.extractWord('docx'));

如何获取结果?

谢谢

当您使用 async/await 时,您不需要 .then。 async/await 只是 promises 的完美替代品,您不应该将它们一起使用

exports.extractData = async function(path) {
    var mammoth = require("mammoth");
     return await mammoth.convertToHtml({path: path}, options);
}

任何async函数returns一个承诺:你需要await你的async函数,像这样:

给你的模块:

const mammoth = require("mammoth");

exports.extractData = async function(path) {

  const aux = await mammoth.convertToHtml({path: path}, options);

  return aux.value;
}

然后你可以这样说:

const {extractData} = require('whatever-my-module-name-is');

async function main() {
  const extractedData = await extractData();

  process( extractedData ) ;
  
}

main()
.then( () => process.exit(0) )
.catch( err => {
  console.error(err);
  process.exit(1);
});