私はNode.jsと非同期呼び出しが新ですが、複数のトランザクションを自動的に行うプログラムを構築しようとしています。まず、Hyperledger Fabricに接続して、forループを通して関数を実行します。いくつかの約束を効率的にループします。
これはかなり高速ですが、速度を大幅に向上させることを検討しています。これは、接続を開始するコードです:
init() {
return this.businessNetworkConnection.connect(this.connectionProfile, this.businessNetworkIdentifier, participantId, participantPwd)
.then((result) => {
console.log(chalk.green('Connected to Hyperledger!'));
this.businessNetworkDefinition = result;
})
.catch(function (error) {
console.log('An error occured: ', chalk.bold.red(error));
});
}
これは私が総勘定元帳に取引を行うことができますコードです:
makeTransaction(fromID, toID, funds) {
const METHOD = 'makeTransaction';
let from;
let walletRegistry;
let to;
return this.businessNetworkConnection.getAssetRegistry('org.acme.Wallet')
.then((registry) => {
console.log(1);
walletRegistry = registry;
return walletRegistry.get(fromID);
})
.then((fromm) => {
console.log(2);
from = fromm;
return walletRegistry.get(toID);
})
.then((too) => {
to = too;
})
.then(() => {
let serializer = this.businessNetworkDefinition.getSerializer();
let resource = serializer.fromJSON({
"$class": "org.acme.Transfer",
"amount": funds,
"from": {
"$class": "org.acme.Wallet",
"id": from.getIdentifier(),
"balance": from.balance,
"owner": "resource:org.acme.Client#" + from.owner.getIdentifier()
},
"to": {
"$class": "org.acme.Wallet",
"id": to.getIdentifier(),
"balance": to.balance,
"owner": "resource:org.acme.Client#" + to.owner.getIdentifier()
}
});
return this.businessNetworkConnection.submitTransaction(resource);
})
.catch(function (error) {
throw (error);
})
}
しかし、今トランザクションは、このようなルックスが起こる作る機能。
static transfer(fromID, toID, funds) {
let bm = new BlockchainManager();
return bm.init()
.then(() => {
return bm.makeTransaction(fromID, toID, funds);
})
.then(() => {
console.log('Success!');
})
.catch(function (error) {
console.log('An error occured: ', chalk.bold.red(error));
process.exit(1);
});
}
私はこれが(私はいくつかの点で毎秒1000上で実行しているよ)取引の多くを作るための最善の方法だとは思いません。これは、これをプログラムする最良の方法でしょうか?
'' walletRegistry'、 'from'と' to'については、 '' .then() 'チェーンで以前の約束の結果にアクセスする方法は?](https: //stackoverflow.com/q/28250680/1048572) – Bergi
ループはどこですか? 「かなり速い」とは何ですか(あなたは何を測定しましたか)?何が改善できると思いますか?プロファイリングをしましたか?ボトルネックは何ですか? – Bergi
BlockChainManagersは再利用可能ですか?そうであれば、新規作成して転送ごとに初期化するのではなく、プールに描画することを検討してください。私はプールを管理するためのいくつかの適切な市販のパラダイムがなければならないと確信しています... –