javascript - 在循环函数异步回调中使用计数器

标签 javascript node.js pdftotext

我有一个 PDF,希望将每一页文本提取到它自己的文档中。这样 1.txt 包含第一页的所有文本,2.txt 包含第二页的所有文本,依此类推...

但是,当它必须写入文件时,计数器 i 已经在页上,我最终只将最后一页保存到文本文件中。

  let pages = 8
  for (var i = 0; i < pages; i++) {
    var option = {from: i, to: i + 1};
    pdfUtil.pdfToText(toFolder + "document.pdf", option, function(err, data) {
      if (err) throw(err);
      fs.writeFile(toFolder + (option.to) + '.txt', data, (err) => {
        console.log("file saved", option.to)
      })
    });
  }

为什么在保存时 option.to 总是等于 9?

如何防止这种情况发生?

最佳答案

将代码包装在 IIFE 的循环内部,如下所示:

  let pages = 8
  for (var i = 0; i < pages; i++) {
    var option = {from: i, to: i + 1};
    (function(option) {
      pdfUtil.pdfToText(toFolder + "document.pdf", option, function(err, data) {
        if (err) throw(err);
        fs.writeFile(toFolder + (option.to) + '.txt', data, (err) => {
           console.log("file saved", option.to)
        })
      });
    })(option);
  }

关于javascript - 在循环函数异步回调中使用计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47018367/

相关文章:

javascript - 使用 Jquery 选择最后一个 div 的所有子项?

javascript - 避免回调 hell 失去变量范围

javascript - 如何 npm 安装并强制安装最新版本(永久)?

python - 如何处理 <FE><FF> 应该是有效的 utf-8?我究竟做错了什么?

perl - 如何使用 CAM::PDF 提取所有页面?

javascript - onClick 并不总是触发

Javascript 动态添加 HTML

javascript - React 组件构造函数和 componentWillReceiveProps 中的常用代码

node.js - Passport.authenticate 无声无息地死去

java - 特殊字符未正确从 pdf 转换为文本