下载文件时节点渲染过程消失

时间:2017-07-21 05:45:25

标签: javascript node.js request electron

我正在编写一个小型电子程序,(目前)可以从Google云端硬盘下载多个大文件。有些文件太大而无法扫描,因此它会诱使服务器相信单击“单击下载”按钮。

问题是,在3,7或12个文件之后,Chrome开发工具窗口显示“渲染过程已消失”。

3个文件: - 尝试连续3次下载相同的被阻止文件时,下载解除阻止功能。第四个文件崩溃了。

7个文件: - 混合使用5个非阻止文件和2个阻止文件,并打开下载解锁功能。第8个文件(非阻止)请求崩溃

12个文件: - 在下载解锁功能关闭时下载9个未阻止的文件和3个被阻止的文件

因此,我得出结论,“解锁”文件占用了12个可能的“插槽”中的3个。然后,一切(或至少数字)都有意义。

取消阻止通过发送另一个请求使用相同的cookie char和一个?confirm = xxxx在同一个网址上工作。

请注意,如果我使用另一个带有100mb测试文件的文件提供程序,整个文件在12个文件后不会崩溃。

如果你能指出我正确的方向,那将是非常有帮助的。

这是使用的代码的真正简化版本。请注意,缺少许多变量声明和其他内容,但这些部分似乎是有问题的:

// downloadmanager.js
function DownloadManager(pack) {
  var _this = this;


  this.downloadpackages = function (package, data, cb) {
    sync.fiber(function () {

      ...

      Object.keys(ht_distinct_urls).forEach(function (url) {
        localfile = sync.await(_this.download(remotefile, sync.defer()));
        console.log("Downloaded:" + localfile);
      });
    });
  }


  this.dl = function (remotefile, cb) {
    request(request_options, (err, response, body) => {
      // cb() in this location makes it crash at the 13th file
      cb(null, "");
    });

    // cb() in this location doesnt make it crash (but also not download anything)
    //cb(null, "");
  }

  this.download = function (remotefile, cb) {
    // Try to download
    _this.dl(remotefile, function (err, data) {
      if (data.downloaded) { // It worked
        cb(err, data);
      } else if (data.unblocked) { // It was able to get a code to unblock it
        _this.dl(data, cb); // Try again with the new cookie and the code
      } else {
        // Fck it, just return the data anyway for debugging
        cb(err, data);
      }
    });
  };
}



// renderer.js
sync.fiber(function () {
  var pack = getPackage();

  var dm = new DownloadManager(pack);

  var download_result = sync.await(dm.downloadpackages(pack, ht_distinct_urls, sync.defer()));
  console.log(download_result);
});

1 个答案:

答案 0 :(得分:0)

好的,似乎我在发布此问题时找到了解决方案。无论如何我会张贴它,也许它可以帮助别人...

似乎谷歌阻止即时下载。在下载之间添加5秒的超时解决了我的问题。没有测试超时有多低,但也许问题已经被settimeout回调解决了......