更新现有资产 - 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);

})

}

})

}

脚本摘要:

  1. 两个值提供给脚本,贷款编号和交易0金额为。
  2. 脚本然后返回资产注册,如果贷款数量已经存在返回 适当布尔。
  3. 如果(在资产注册表中存在贷款犯规)假,新的资产将利用从交易贷款和余额创建。
  4. 如果为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

回到顶部