2016-05-02 2 views
0

У меня есть ошибка в моем коде nodejs, который включает в себя загрузку файлов параллельно с AWS Bucket с использованием q. Где-то в коде возникает ошибка. У меня нет идеи, где.Как найти строку источника, в которой сбой программы async nodejs

Конкретная ситуация: У меня есть простой nodejs скрипт, который загружает все файлы в текущем каталоге на AWS ведро и возвращают «Q» обещание результата:

var uploadAll = function() { 
    var uploadFiles = readdirRecursiveSync("."); 

    var uploadPromises = uploadFiles.map(function(fileName) { 
     var bucket = new AWS.S3({ params: { Bucket: bucketName } }); 
     var file = fs.createReadStream(fileName); 
     return Q.denodeify(bucket.upload)({ Body: file, Key: fileName}); 
    }); 
    return Q.all(uploadPromises); 
} 

uploadAll().then(function(){ 
    console.log("done"); 
}).catch(function(error) { 
    console.log(error); 
}); 

Теперь, когда Я делаю это я получаю ошибку, которая звучит так:

[TypeError: self.service.constructor.__super__ is not a function] 

Но я понятия не имею, как найти исходную строку, которая производит эту ошибку.

Я попытался запустить скрипт с

node debug script.js 

Но это не помогло.

ответ

1

Вы, вероятно, необходимо включить поддержку трассировки долго стека Q, если вы хотите, чтобы найти исходную строку, которая на самом деле производит ошибку:

Q_DEBUG=1 node script.js 

Но я уже могу сказать, что проблема заключается в том, что метод bucket.upload требует, чтобы контекст() был bucket. Поэтому вам нужно связать этот метод с bucket.

var uploadAll = function() { 
    var bucket = new AWS.S3({ params: { Bucket: bucketName } }); 
    var bucketUpload = Q.nbind(bucket.upload, bucket); 
    return Q.all(readdirRecursiveSync(".").map(function(fileName) { 
     var file = fs.createReadStream(fileName); 
     return bucketUpload({ Body: file, Key: fileName }); 
    })); 
}