From 2f079d49fcd66b4560a1b36af6100f02e60fcc5c Mon Sep 17 00:00:00 2001 From: Brett Logan Date: Fri, 24 Jul 2020 15:14:27 -0400 Subject: [PATCH] Refactor GetAllAssets GetAllAssets uses getStateByRange which returns an iterator. Refactored code to make use of the iterator as this code did not function in its previous state Signed-off-by: Brett Logan --- .../chaincode-javascript/lib/assetTransfer.js | 13 ++++++++----- .../chaincode-typescript/src/assetTransfer.ts | 9 ++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/asset-transfer-basic/chaincode-javascript/lib/assetTransfer.js b/asset-transfer-basic/chaincode-javascript/lib/assetTransfer.js index f36eff34..6927eca1 100644 --- a/asset-transfer-basic/chaincode-javascript/lib/assetTransfer.js +++ b/asset-transfer-basic/chaincode-javascript/lib/assetTransfer.js @@ -57,8 +57,8 @@ class AssetTransfer extends Contract { ]; for (const asset of assets) { - assets.docType = 'asset'; - await ctx.stub.putState(assets.ID, Buffer.from(JSON.stringify(assets))); + asset.docType = 'asset'; + await ctx.stub.putState(asset.ID, Buffer.from(JSON.stringify(asset))); console.info(`Asset ${asset.ID} initialized`); } } @@ -129,8 +129,10 @@ class AssetTransfer extends Contract { async GetAllAssets(ctx) { const allResults = []; // range query with empty string for startKey and endKey does an open-ended query of all assets in the chaincode namespace. - for (const { key, value } of ctx.stub.getStateByRange('', '')) { - const strValue = Buffer.from(value).toString('utf8'); + const iterator = await ctx.stub.getStateByRange('', ''); + let result = await iterator.next(); + while (!result.done) { + const strValue = Buffer.from(result.value.value.toString()).toString('utf8'); let record; try { record = JSON.parse(strValue); @@ -138,7 +140,8 @@ class AssetTransfer extends Contract { console.log(err); record = strValue; } - allResults.push({ Key: key, Record: record }); + allResults.push({ Key: result.value.key, Record: record }); + result = await iterator.next(); } return JSON.stringify(allResults); } diff --git a/asset-transfer-basic/chaincode-typescript/src/assetTransfer.ts b/asset-transfer-basic/chaincode-typescript/src/assetTransfer.ts index 0895685d..3c4d62fa 100644 --- a/asset-transfer-basic/chaincode-typescript/src/assetTransfer.ts +++ b/asset-transfer-basic/chaincode-typescript/src/assetTransfer.ts @@ -136,8 +136,10 @@ export class AssetTransfer extends Contract { public async GetAllAssets(ctx: Context): Promise { const allResults = []; // range query with empty string for startKey and endKey does an open-ended query of all assets in the chaincode namespace. - for await (const {key, value} of ctx.stub.getStateByRange('', '')) { - const strValue = Buffer.from(value).toString('utf8'); + const iterator = await ctx.stub.getStateByRange('', ''); + let result = await iterator.next(); + while (!result.done) { + const strValue = Buffer.from(result.value.value.toString()).toString('utf8'); let record; try { record = JSON.parse(strValue); @@ -145,7 +147,8 @@ export class AssetTransfer extends Contract { console.log(err); record = strValue; } - allResults.push({Key: key, Record: record}); + allResults.push({ Key: result.value.key, Record: record }); + result = await iterator.next(); } return JSON.stringify(allResults); }