async eachSeries - обратный вызов никогда не вызывается

javascript node.js

86 просмотра

1 ответ

У меня проблема с async.eachSeries - я использую его для перебора массива и загрузки файлов с помощью функции (см. Источник), но обратный вызов никогда не вызывается ... Я что-то не так делаю? Я не уверен насчет обратных вызовов ...

function checkAndDownloadPlaylist(data,cb) {

    async.eachSeries(data,function(val,callback) {
        url=val.media[0];
        fileSize=val.fileSize;
        checkAndDownloadItem(url,fileSize, callback);
    }, function(error) {
        // never called...
        if(error) {
            return cb(error);
        }
        cb();
    });

}

function checkAndDownloadItem(url,fileSize,cb) {

    if(checkedUrls.indexOf(url)==-1) {
        fileName=getFileNameFromUrl(url);
        filePath=path.join(config.movieDir,fileName);

        // save file in usedFiles[]
        d=new Date();
        usedFiles[fileName]=d.toISOString();

        fs.access(filePath, fs.constants.F_OK, function(error) {
            checkedUrls.push(url);

            if(error) {
                // file is not there
                winston.debug('file Missing, start DL: '+fileName);
                download(url,filePath,cb);
            }else{
                // file is there
                winston.debug('file already there: '+fileName);
                cb(null);
            }

        });
    }
}

function download(url,destination,cb) {

    winston.debug('start DL: '+url);

    var tmpDestination=destination+'.tmp';

    file=fs.createWriteStream(tmpDestination);
    request = http.get(url, function(response) {
        response.pipe(file);
        file.on('finish', function() {
            winston.debug('finished DL: '+url);
            file.close();

            fs.renameSync(tmpDestination,destination);
            cb(null);
        });
    }).on('error', function(error) {
        fs.unlinkSync(tmpDestination);
        if(error) {
            cb(error.message);
            winston.log('notice','error DL: '+url);
        }
        cb(null);
    });
}

Автор: cklm Источник Размещён: 08.11.2019 11:12

Ответы (1)


-1 плюса

Попробуйте изменить функцию обратного вызова на cb

    function checkAndDownloadPlaylist(data,cb) {

    async.eachSeries(data,function(val,cb) {
        url=val.media[0];
        fileSize=val.fileSize;
        checkAndDownloadItem(url,fileSize, cb);
    }, function(error) {
        if(error) {
            throw error;
        }
        console.log('Done!');
    });
 }
Автор: Med Lazhari Размещён: 20.08.2016 02:35
Вопросы из категории :
32x32