首页 > 解决方案 > 资产在 for 循环中没有得到更新

问题描述

我正在尝试在事务中使用 for-loop。for 循环基本上创建了新的资产,即。我在每次迭代中创建一个新资产。

问题是每次循环迭代的值都vals.length保持为零(0)。如果我尝试这样做console.log(vals),即使循环迭代它也会显示空数组i=1,2,3...

但是一旦整个交易功能完成,我就可以在 UI 中看到资产。

模型.cto

asset Net identified by NetNumber{
    o String NetNumber
    o Integer totaltransaction
}

transaction GenerateNet {

}

逻辑.js

/**
* submit an order
* @param {org.demo.invoice.GenerateNet}
* @transaction
*/
async function GenerateNet(){
    var amt = [200, 500, 700];
    var netNumber = ['aa', 'bb', 'cc'];
    for(var i=0; i < amt.length; i++){
        let netRegistry = await getAssetRegistry('org.demo.invoice.Net');
        let vals = await netRegistry.getAll();
        console.log(vals.length); 
        console.log(vals);
        let newNetting = factory.newResource('org.demo.invoice','Net', netNumber);
        newNetting.totaltransaction = amt[i];
        await nettingRegistry.add(newNetting);
    }
}

随着迭代的进行,我希望看到 vals.length 的值是 1,2,3。

标签: javascriptblockchainhyperledgerhyperledger-composer

解决方案


在交易被背书之前,新资产不会添加到分类帐中。因此,在运行代码时,实际上并没有添加任何资产,如果/当交易被批准时,它们会被安排添加。

换句话说,您不能在同一个事务中添加资产并读取它。


推荐阅读