【问题标题】:program is ignoring asynchronous mode程序忽略异步模式
【发布时间】:2020-08-29 03:38:18
【问题描述】:

有人可以帮帮我吗?

由于某种原因,程序忽略了异步模式。

代码结果= [] 测试

我做错了什么?

var linha = [];

async function func(){

  const { PdfReader } = require('pdfreader');

  const reader = new PdfReader();

  await reader.parseBuffer(req.file.buffer,  (err, item)  => {
      if (err)
        console.error(err);

      else if (!item)
        console.log('Done.');

      else if (item.text) {
        linha.push(item.text);
        console.log('test');
      }
  });
}

await func();
console.log(linha);

【问题讨论】:

  • 你怎么知道它忽略了异步?你得到什么输出?
  • 你不能在异步函数之外使用 await。倒数第二行
  • 这里的基本问题。 await 只有在你 await 承诺时才会做任何有用的事情。由于reader.parseBuffer() 没有返回承诺,因此您的函数根本没有与该操作的完成挂钩。

标签: javascript node.js


【解决方案1】:

问题是reader.parseBuffer 没有返回承诺。它触发您提供的回调。 本质上,语法有点偏离。您可以将reader.parseBuffer 包装为“承诺”这样的方法:

var linha = [];

const { PdfReader } = require('pdfreader');
const reader = new PdfReader();
const promiseParseBuffer = buffer => new Promise((resolve, reject) => {
    reader.parseBuffer(buffer,  (err, item)  => {
        if (err) return reject(err);
        
        resolve(item);
    });
});

async function func(){

    try {
        const item = await promiseParseBuffer(req.file.buffer);

        console.log(item);
    } catch (error) {
        console.error(error);
    }
}

await func();
console.log(linha);

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多