javascript - 锯齿交易处理器不工作
问题描述
我正在开发一个简单的钱包,用于在超级账本锯齿上存钱 webapp。我希望在特定时间间隔后存入金额。为此,我正在使用setInterval()
. 我写了一个成功后解决的承诺setInteval()
。但我在这里面临一个问题。我的 TP 工作不正常。正在添加块,但未创建状态。
class SimpleWalletHandler extends TransactionHandler {
constructor(){
super(SW_FAMILY,['1.0'],[SW_NAMESPACE]);
}
apply(transactionProcessRequest, context){
let payload = transactionProcessRequest.payload;
payload = payload.toString().split(',');
var action, amount;
action = payload[0];
amount = payload[1];
let header = transactionProcessRequest.header;
let userPublicKey = header.signerPublicKey;
let endMinutes = 40; //Hard-coded value. Later I am going to get this from front-end
if(action === 'deposit'){
//I think the issue is getting raised from now on
let p = new Promise((resolve,reject) => {
let timer = setInterval(()=>{
let startMinutes = new Date().getMinutes();
if(startMinutes >= endMinutes){
console.log('From: Alice\nTo: Bob\nAmount: $99');
clearInterval(timer);
resolve(99);
}
},1000);
})
p.then((flag) => {
if(flag == 99){
let senderAddress = SW_NAMESPACE + _hash(userPublicKey).slice(-64);
let strAmount = amount.toString();
let dataBytes = encoder.encode(strAmount);
let entries = {
[senderAddress]: dataBytes
}
return context.setState(entries)
.then((result) => console.log(`Success${result}`))
.catch((error) => console.error(`Error!${error}`));
}
});
return p;
}
}
}
我是 javascript 的初学者。请帮我解决这个问题。如果可能,请提供完整的更正片段。提前致谢 :)
解决方案
我不是 JavaScript 专家,但事务处理器必须是确定性的——包括时间无关的。也就是说,当处理事务时,总是会出现相同的结果。这是因为一个事务通常在提交时、发布时以及由每个节点处理多次。
更好的解决方案是让一个守护进程或单独的客户端处理时间敏感交易的时间安排和提交(我想,比如利息和费用)。
推荐阅读
- jquery-ui - 当隐藏目标区域位于下方时,JQuery UI 可排序项目未检测到固定目标区域
- django-rest-framework - 在 DRF 中创建发布请求时如何限制字段?
- linux - 如何使用 curl 模拟大文件的 ftp 传输?
- r - optimx() 的问题(“无法在初始参数处评估函数”)
- android - 树莓派屏幕镜像性能
- xml - 如果这些参数是 XML 标记/节点,如何在 XQuery 中处理用户定义的参数?
- mysql - MySQL查询的二进制数据在使用速记时是错误的
- mysql - MySQL 报告:文档 #1064 - 规则 3 中与 "" 一起使用的语法有问题
- javascript - 如何使用图像制作自定义复选框?
- ssis - 如何在 Visual Studio 2019 中编辑 SSIS 脚本任务?