Node.js Hyperledger结构中的资产历史记录

Node.js Hyperledger结构中的资产历史记录,node.js,hyperledger-fabric,blockchain,smartcontracts,hyperledger-chaincode,Node.js,Hyperledger Fabric,Blockchain,Smartcontracts,Hyperledger Chaincode,我正在使用node.js编写链码,我想了解药品供应链中的药品历史。我部署了chaincode,调用了制造和购买合同,将药物的当前状态从一个所有者修改为另一个所有者。事实上,我只是为此修改了商业票据链码。所有者的变化反映在couchdb数据库中。但是,当我试图通过药物密钥获取药物史时,它并没有像预期的那样起作用 我用的代码 const promiseOfIterator = this.ctx.stub.getHistoryForKey(drugKey); const results = [];

我正在使用node.js编写链码,我想了解药品供应链中的药品历史。我部署了chaincode,调用了制造和购买合同,将药物的当前状态从一个所有者修改为另一个所有者。事实上,我只是为此修改了商业票据链码。所有者的变化反映在couchdb数据库中。但是,当我试图通过药物密钥获取药物史时,它并没有像预期的那样起作用

我用的代码


const promiseOfIterator = this.ctx.stub.getHistoryForKey(drugKey);
const results = [];
for await (const keyMod of promiseOfIterator) {
            
            const resp = {
                timestamp: keyMod.timestamp,
                txid: keyMod.tx_id
            }
            if (keyMod.is_delete) {
                resp.data = 'KEY DELETED';
            } else {
                resp.data = keyMod.value.toString('utf8');
            }
            results.push(resp);
        }
return results;
当我打印结果时,它给出:
[]
当我这样做时:
Drug.fromBuffer(getDrughHistoryResponse)
并打印它,它给出
Drug{class:'org.medicochainnet.Drug',key:':',currentState:null}

如何做到这一点?我做错了什么?请帮帮我。

函数

ctx.stub.getHistoryForKey(drugKey); 
是一个异步函数。因此,您需要添加等待

const promiseOfIterator = await this.ctx.stub.getHistoryForKey(drugKey);

然后您可以迭代结果。

我已经在这样的演示中完成了:

const promiseOfIterator = await this.ctx.stub.getHistoryForKey(drugKey);
const results = [];
while(true){
 let res = await promiseOfIterator.next();
  //In the loop you have to check if the iterator has values or if its done 
  if(res.value){do your actions} 
  if(res.done){
   // close the iterator 
   await promiseOfIterator.close()
   // exit the loop
   return results
   }
}

有关Javascript中迭代器的更多信息,请查看Mozilla文档

你能在这里添加一个完整的链码参考来识别drugKey参考。它和商业票据教程链码相同。我只是想知道商业票据中票据的历史。然后它给出了这个错误:
TypeError:promiseOfIterator不是异步的。然后我试着做了
…for(promiseOfIterator的const keyMod){…
仅仅通过删除wait,它就出现了这个错误:
类型错误:promiseOfIterator不适合
。我写了一个新的答案来让代码更清晰。结果和结果是一样的吗?嗨,不,我是指你的结果数组。我已经编辑了答案。