Skip to content

Instantly share code, notes, and snippets.

@t-okushima
Last active March 14, 2018 14:22
Show Gist options
  • Save t-okushima/8469bfdf35eb85d3574a2f0e221e4188 to your computer and use it in GitHub Desktop.
Save t-okushima/8469bfdf35eb85d3574a2f0e221e4188 to your computer and use it in GitHub Desktop.
batchWriteItemでデータ追加 ref: https://qiita.com/t-okushima/items/e8127977988e322615e6
'use strict';
let util = require('util');
let aws = require('aws-sdk');
aws.config.loadFromPath('./config/credentials.json');
let dynamodb = new aws.DynamoDB({apiVersion: '2012-08-10'});
// 格納データ作成
let writeFuncs = new Array();
for (let i = 0; i < 5; i++) {
let putRequests = [];
for (let l = 0; l < 5; l++) {
let id = (i + 1) * l;
putRequests[l] = {
PutRequest : {
Item : {
'id' : {'S' : id.toString()},
'name' : {'S' : 'name' + id}
}
}
}
}
function doWriteItemCall() {
return doWriteItem({
RequestItems : {
"users" : putRequests
}
});
}
writeFuncs[i] = doWriteItemCall;
}
writeFuncs[5] = function () {
console.log('end');
}
// データ追加
console.log('start');
sequenceTasks(writeFuncs);
function doWriteItem(params) {
console.log('doWriteItem call');
return new Promise(function (resolve, reject) {
let callback = batchWriteItemCallback.bind(null, resolve, reject);
dynamodb
.batchWriteItem(params)
.on('complete', callback)
.send();
});
}
function batchWriteItemCallback(resolve, reject, response) {
let error = response.error;
let data = response.data;
console.log(error, data);
let callback = batchWriteItemCallback.bind(null, resolve,reject);
if (error) {
if (error.retryable) {
dynamodb
.batchWriteItem(response.request.param)
.on('complete', callback)
.send();
} else {
reject(error);
}
} else if('users' in data.UnprocessedItems) {
let params = {};
params.RequestItems = data.UnprocessedItems;
dynamodb
.batchWriteItem(params)
.on('complete', callback)
.send();
} else {
resolve();
}
}
function sequenceTasks(tasks) {
function recordValue(results, value) {
results.push(value);
return results;
}
// let pushValue = recordValue.bind(null, []);
return tasks.reduce(function (promise, task) {
console.log('reduce call');
return promise
.then(task)
// .then(pushValue)
;
}, Promise.resolve());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment