【发布时间】:2015-11-18 17:18:22
【问题描述】:
我正在尝试在 aws-sdk 中使用 batchWriteItem,但遇到了导致节点崩溃的错误。奇怪的是我的项目确实被写入了数据库。错误发生在 sdk 内部。
我的代码是:
function sendItems(params) {
console.log("SENDING:");
console.log(params);
dynamodb.batchWriteItem(params, function(err, data) {
console.log("Response from DynamoDB");
if(err) console.log(err);
else console.lod(data);
});
}
var toSave = [];
for(name in names) {
var item = {
Id: { S: uuid.v4() },
Name: { S: name }
};
toSave.push(item);
}
var items = [];
for(var i = 0; i < toSave.length; i++) {
items[i] = {
PutRequest: { Item: toSave[i] }
}
}
var params = {
RequestItems: {
'MyTableName': items
},
ReturnConsumedCapacity: 'TOTAL',
ReturnItemCollectionMetrics: 'SIZE'
};
sendItems(params);
错误的堆栈跟踪是:
/Users/gsimons/node_modules/aws-sdk/lib/request.js:30
throw err;
^
TypeError: undefined is not a function
at Response.<anonymous> (/Users/gsimons/Documents/workspace/testing/aws-put-items.js:62:21)
at Request.<anonymous> (/Users/gsimons/node_modules/aws-sdk/lib/request.js:353:18)
at Request.callListeners (/Users/gsimons/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/Users/gsimons/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/Users/gsimons/node_modules/aws-sdk/lib/request.js:595:14)
at Request.transition (/Users/gsimons/node_modules/aws-sdk/lib/request.js:21:10)
at AcceptorStateMachine.runTo (/Users/gsimons/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /Users/gsimons/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/Users/gsimons/node_modules/aws-sdk/lib/request.js:37:9)
at Request.<anonymous> (/Users/gsimons/node_modules/aws-sdk/lib/request.js:597:12)
现在真正让我感动的是当我查看 node_modules/aws-sdk/lib/request.js 时:
21: self.emit(self._asm.currentState, function(err) {
22: if (err) {
23: if (isTerminalState(self)) {
24: if (domain && self.domain instanceof domain.Domain) {
25: err.domainEmitter = self;
26: err.domain = self.domain;
27: err.domainThrown = false;
28: self.domain.emit('error', err);
29: } else {
30: throw err;
31: }
32: } else {
33: self.response.error = err;
34: done(err);
35: }
36: } else {
37: done(self.response.error);
38: }
39: });
实际上发生了以下事情似乎很奇怪:
if(err) {
//err must be defined here, right?
//No code modifies err or sets it to undefined.
//Is it possible that another thread altered err
// between the call to the function and the call to throw?
throw err; //Should just throw err back up.
}
这可能是 aws js sdk 中的错误吗?
【问题讨论】:
-
你有机会完成它吗?我有点在上传的下一个阶段。它说“提供的密钥与架构不匹配”。没有铃声吗?
标签: javascript node.js amazon-web-services