Last active
March 14, 2018 14:22
-
-
Save t-okushima/8469bfdf35eb85d3574a2f0e221e4188 to your computer and use it in GitHub Desktop.
batchWriteItemでデータ追加 ref: https://qiita.com/t-okushima/items/e8127977988e322615e6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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