javascript – 在自定义承诺上使用async await

我试图在一个返回一个promise的函数上使用异步等待但是我得到的输出是Promise {< pending> }.在这里我使用名为convertFiletoPDF的函数返回一个promise.我需要获取输出(我在resolve()中提到的路径).
当我用它时

convertFiletoPDF(file).then((result) => {
  console.log(result);
}).catch((err)=>{
  console.log(err);
});

它给出了预期的结果.下面的代码有什么问题?我对这些异步等待和承诺相当新.

 function convertFiletoPDF(file) {
  return new Promise(function(resolve, reject) {
    unoconv.convert(file, "pdf", function(
      err,
      result
    ) {
      if (err) {
        reject(err);
      }
      let File = file.substring(file.lastIndexOf("/")+1,file.lastIndexOf("."));
      // result is returned as a Buffer
      fs.writeFile(__dirname+"/files/converted/"+File+".pdf", result, error => {
        /* handle error */
        if (err) reject(error);
        else resolve("./files/converted/"+File+".pdf");
      });
    });
  });
}

async function myfunc(file){
  let res = await convertFiletoPDF(file);
  return res;
}

let res = myfunc(file);
console.log(res);

解决方法:

异步函数的返回值是一个promise,所以这就是你的console.log输出的结果.您需要通过await(在另一个异步函数中)使用结果或使用then / catch(在另一个异步函数中).

这就是你目前正在做的事情:

function convertFiletoPDF(file) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, 400, "Done");
  });
}

async function myfunc(file){
  let res = await convertFiletoPDF(file);
  return res;
}

let res = myfunc("some file");
console.log(res);

你需要这样做:

function convertFiletoPDF(file) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, 400, "Done");
  });
}

async function myfunc(file){
  let res = await convertFiletoPDF(file);
  return res;
}

(async() => {
  try {
    let res = await myfunc("some file");
    console.log(res);
  } catch (e) {
    // Deal with the fact there was an error
  }
})();

或者随后赶上:

function convertFiletoPDF(file) {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, 400, "Done");
  });
}

async function myfunc(file){
  let res = await convertFiletoPDF(file);
  return res;
}

myfunc("some file")
  .then(res => {
    console.log(res);
  })
  .catch(e => {
    // Deal with the fact there was an error
  });

相关文章

最后的控制台返回空数组.控制台在ids.map函数完成之前运行va...
我正在尝试将rxJava与我已经知道的内容联系起来,特别是来自J...
config.jsconstconfig={base_url_api:"https://douban....
我正在阅读MDN中的javascript,并且遇到了这个谈论承诺并且不...
config.jsconstconfig={base_url_api:"https://douban....
这是我的代码main.cpp:#include<string>#include<...