gpt4 book ai didi

node.js - 如何找到异步 nodejs 程序失败的源代码行

转载 作者:行者123 更新时间:2023-12-03 08:27:30 25 4
gpt4 key购买 nike

我的 nodejs 代码中有一个错误,涉及使用 q 将文件并行上传到 AWS 存储桶.在代码的某处产生了错误。我不知道在哪里。

具体情况:
我有一个简单的 nodejs 脚本,它将当前目录中的所有文件上传到 aws 存储桶并返回结果的“q” promise :

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

但这并没有帮助。

最佳答案

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

Q_DEBUG=1 node script.js

但我已经可以告诉你,问题在于 bucket.upload方法要求上下文 ( this) 是 bucket .所以你需要将该方法绑定(bind)到 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 });
}));
}

关于node.js - 如何找到异步 nodejs 程序失败的源代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com