我很奇怪“异步”模块不能正常工作

时间:2014-12-22 08:17:32

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

我想

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

  3. 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云端硬盘中打开上传的图片。

1 个答案:

答案 0 :(得分:0)

将回调交给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提供宝贵意见。