首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查找异步nodejs程序失败的源行

如何查找异步nodejs程序失败的源行
EN

Stack Overflow用户
提问于 2016-05-02 15:07:39
回答 1查看 50关注 0票数 0

我的nodejs代码中有一个错误,它涉及使用问:并行地上传文件到AWS桶。代码中的某个地方会产生错误。我不知道在哪里。

的具体情况:I有一个简单的nodejs脚本,它将当前目录中的所有文件上传到AWS桶并返回结果的"q“承诺:

代码语言:javascript
运行
复制
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);
});

现在,当我这样做时,我得到一个错误,如下所示:

代码语言:javascript
运行
复制
[TypeError: self.service.constructor.__super__ is not a function]

但我不知道如何找到产生此错误的源行。

我试着用

代码语言:javascript
运行
复制
node debug script.js

但这并没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-02 16:11:31

如果要找到实际产生错误的源行,则可能需要启用q的长堆栈跟踪支持:

代码语言:javascript
运行
复制
Q_DEBUG=1 node script.js

但我已经可以告诉您,问题是bucket.upload方法要求上下文(this)是bucket。因此,您需要将该方法绑定到bucket

代码语言:javascript
运行
复制
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 });
    }));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36985688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档