更新现有资产 - Hyperledger作曲家
我试图创建作曲家简单hyperledger chaincode,需要一个贷款数目,如果它存在,否则更新相关的资产创建一个新的资产。更新现有资产 - Hyperledger作曲家
我的模型文件看起来像这样:
asset Loan identified by loanNum{ o String loanNum
o Double balance
}
transaction createTransaction {
o String loanNum
o Double transAmount
}
我的剧本是这样的:
function createTransaction(tx) { var NS = 'org.acme.ra';
var factory = getFactory();
var loanToUpdate
//returns all assets
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry){
return assetRegistry.exists(tx.loanNum);
})
.then(function(exists){
if (exists) {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
loanToUpdate = assetRegistry2.get(tx.loanNum)
loanToUpdate.balance = tx.transAmount;
return assetRegistry2
})
.then(function(updateAssetRegistry){
return updateAssetRegistry.update(loanToUpdate)//broken right here
})
}
else {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
var newLoan =factory.newResource(NS,'Loan',tx.loanNum);
newLoan.balance = tx.transAmount;
return assetRegistry2.add(newLoan);
})
}
})
}
脚本摘要:
- 两个值提供给脚本,贷款编号和交易0金额为。
- 脚本然后返回资产注册,如果贷款数量已经存在返回 适当布尔。
- 如果(在资产注册表中存在贷款犯规)假,新的资产将利用从交易贷款和余额创建。
- 如果为True,则返回的资产注册表,然后我用不用彷徨功能,并设置结果等于在脚本的开始创建的loanToUpdate变量。然后,我使用资产注册表上的.update(loanToUpdate)函数来更新现有资产。
当布尔是假的脚本正常工作,并创建一个新的资产,但是当布尔是真实的,交易中包含已经存在我得到的错误贷款数量“错误:预期资源或概念”
编辑
现在,我得到更多的经验,这一点,我认为这是可以做到更容易与内置的关系,但低于生病后我更新的功能代码。
更新的代码与修复:
function createTransaction(tx) { var NS = 'org.acme.ra';
var factory = getFactory();
var loanToUpdate
//returns all assets
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry){
return assetRegistry.exists(tx.loanNum);
})
.then(function(exists){
if (exists) {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
return assetRegistry2.get(tx.loanNum);
})
.then(function(updateloan){
loanToUpdate = updateloan
loanToUpdate.balance = tx.transAmount;
return getAssetRegistry(NS + '.Loan')
})
.then(function(assetRegistry3){
return assetRegistry3.update(loanToUpdate);
})
}
else {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
var newLoan = factory.newResource(NS,'Loan',tx.loanNum);
newLoan.balance = tx.transAmount;
return assetRegistry2.add(newLoan);
})
}
})
}
回答:
获得的资产注册表返回一个承诺,所以行 loanToUpdate = assetRegistry2.get(tx.loanNum)
需要在承诺链的一部分,所以你需要一个.then
块来处理返回的值,然后才能更新它。
以上是 更新现有资产 - Hyperledger作曲家 的全部内容, 来源链接: utcz.com/qa/267183.html