node.js - Hyperledger Fabric 中的资产历史
问题描述
我正在使用 node.js 编写链代码,我想了解药品供应链中药物的历史。我部署了链代码,调用了制造和购买合同,将药物的当前状态从一个所有者修改为另一个所有者。事实上,我只是为此修改了商业票据链代码。所有者的更改反映在 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(getDrugHistoryResponse);
并打印它,它给出Drug { class: 'org.medicochainnet.drug', key: ':', currentState: null }
如何使这项工作?我在这里做错了什么?请帮我。
解决方案
功能
ctx.stub.getHistoryForKey(drugKey);
是一个异步函数。所以你需要添加等待
const promiseOfIterator = await this.ctx.stub.getHistoryForKey(drugKey);
然后你可以迭代结果。
推荐阅读
- c++ - 为什么两个不同布局兼容类型的数组本身布局不兼容?
- javascript - 为什么使用 POST 方法可以防止 json 劫持?
- django - Heroku/Django:项目未迁移,运行 manage.py migrate 时抛出有关丢失表的错误
- javascript - Microsoft Graph API 文件请求不返回任何文件
- c - Realloc 错误,读取管道失败错误,关闭管道错误
- twitter-bootstrap - Bootstrap 不固定按钮
- python - 从保存在集合中的标准输出拆分行
- c++ - VirtualAllocEx 抛出 ERROR_INVALID_HANDLE
- c++ - 毫不拖延地将作业传递给另一个函数
- c# - 我收到“SQLite 错误 14:'无法打开数据库文件'”。