【问题标题】:I am strange that "Async" module doesn't work well我很奇怪“异步”模块不能正常工作
【发布时间】:2023-03-19 22:24:01
【问题描述】:

我想要

  1. 下载图片文件,然后
  2. 将图像文件上传到 Google 云端硬盘

var async = require('async');
var fileToUpload = require('./FileToUpload.js');

var fu;

async.waterfall([
    function (callback) {
        /*** At first, download image file ***/
        fu = new fileToUpload.FileToUpload('http://weed.cocolog-nifty.com/wzero3es/images/scrn0000_1.jpg');
        callback(null, fu);
    },
    function (arg, callback) {
        /*** Secondary, upload the image file to Google Drive ***/
        arg.uploadToGoogleDrive();
        callback(null, 'done');
    }
]);
  • 没有没有错误,并且
  • Google 的响应是文件上传成功
  • 在 Google 云端硬盘中,有 新文件
  • 但数据已损坏,因此我无法打开图片

另外,下载和上传分开没问题。我可以在 Google Drive 中打开上传的图片。

【问题讨论】:

  • 什么是 fileToUpload ?这是你的实现还是 npm 包?
  • 我认为您的第一个回调(下载图像文件)函数在您的 fileToUpload.FileToUpload 函数完成其操作之前进行
  • 我很确定您的 FileToUpload() 函数包含异步函数,因为它与 I/O 相关。如果是这样,您需要在上传过程完成后在 FileToUpload() 函数中执行异步瀑布的回调,这发生在上传文件函数的回调中。如果您仍然不明白,请将您的完整 FileToUpload() 代码添加到问题中,也许我们可以提供帮助

标签: javascript node.js asynchronous google-drive-api


【解决方案1】:

将回调传递给 FileToUpload 构造函数。

async.waterfall([
    function (callback) {
        /*** hand the async callback to the FileToUpload constructor ***/
        fu = new fileToUpload.FileToUpload('http://xxx/sample.jpg', callback);
    },
    ...

并在 FileToUpload 构造函数中调用回调。

// FileToUpload.js

        ...

        file.on('finish', function () {
            file.close(function () {
                callback(null, _this); /*** callback for async ***/
            });
        });

        ...

感谢@bagz_man 的宝贵建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多