我使用oraclize-api
获取并存储twitter帖子到智能契约中。文章被放置到mapping
中,使用twitter作为键(即<username>/status/<id>
),tweet文本作为值。
我希望在调用oraclize __callback
函数并将tweet文本保存到智能契约之后,前端显示tweet文本。
我所接受的选择包括:
""
的tweet文本值两者都不太好,特别是如果Oraclize有问题的话,比如状态永远不会更新的气体外错误。
有推荐的做法吗?
发布于 2018-08-17 23:33:17
最后,我对异步函数进行了递归调用,以支持此场景。
就像这样:
checkOracle: function (count) {
if (count > 30) {
App.showErrorMessage("Something went wrong with the oraclize process.");
return;
}
var twitterBountyInstance;
var tweetUrl = $('#twitter-url').val();
if (tweetUrl.includes("https://twitter.com/")) {
tweetId = tweetUrl.replace("https://twitter.com/", "");
App.contracts.TwitterBounty.deployed().then(function (instance) {
twitterBountyInstance = instance;
return twitterBountyInstance.getTweetText(tweetId)
}).then(function (result) {
if (result == "") {
App.showNormalMessage("Loading... (" + count + ")");
setTimeout(function () {
App.checkOracle(count + 1);
}, 1000);
} else {
App.showOracleTweetText(result);
}
})
} else {
console.log("Bad URL")
}
},
函数接受一个参数,如果需要太长时间,该参数可用于超时操作。
发布于 2018-08-18 03:28:43
您可以编写回调函数以发出事件,然后在前端使用web3侦听具有该名称的事件。
因此,在处理回调tx时,事件将被发出,如果您在dApp上侦听此类事件,您将有机会对其采取行动。你不需要做任何无限循环,只要听事件。
如果由于某种原因没有触发Oraclize,您的dapp将永远不会接收到事件,在这个事件中,我以为您可以超时或其他什么的。如果收到回调,但由于与您为函数编写的实际代码有关的原因,则相同的场景。不过,您将能够知道它已恢复并相应地失败了。
https://ethereum.stackexchange.com/questions/56365
复制相似问题