我很奇怪“异步”模块不能很好地工作

I am strange that "Async" module doesn't work well

本文关键字:不能 模块 很好 工作 异步      更新时间:2023-09-26

我想

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

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');
    }
]);
  • 没有错误,并且
  • 谷歌的回应是文件上传成功
  • 在谷歌云端硬盘中,有新文件
  • 但是数据已损坏,因此我无法打开图像

另外,下载和上传分开没有问题。我可以在谷歌云端硬盘中打开上传的图像。

将回调交给 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的宝贵建议。