forked from launchdarkly/node-server-sdk-dynamodb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdynamodb_helpers.js
49 lines (44 loc) · 1.33 KB
/
dynamodb_helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function paginationHelper(params, executeFn, startKey) {
return new Promise(function(resolve, reject) {
if (startKey) {
params['ExclusiveStartKey'] = startKey;
}
executeFn(params, function(err, data) {
if (err) {
reject(err);
return;
}
if ('LastEvaluatedKey' in data) {
paginationHelper(params, executeFn, data['LastEvaluatedKey']).then(function (nextPageItems) {
resolve(data.Items.concat(nextPageItems));
});
} else {
resolve(data.Items);
}
});
});
}
function queryHelper(client, params, startKey) {
return paginationHelper(params, function(params, cb) { return client.query(params, cb); }, startKey);
}
function batchWrite(client, tableName, ops) {
var writePromises = [];
// BatchWrite can only accept 25 items at a time, so split up the writes into batches of 25.
for (var i = 0; i < ops.length; i += 25) {
var requestItems = {};
requestItems[tableName] = ops.slice(i, i+25);
writePromises.push(new Promise(function(resolve, reject) {
client.batchWrite({
RequestItems: requestItems
}, function(err) {
err ? reject(err) : resolve();
});
}));
}
return writePromises;
}
module.exports = {
batchWrite: batchWrite,
paginationHelper: paginationHelper,
queryHelper: queryHelper
};