首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Web3.js检测前端更新的oraclize完成

使用Web3.js检测前端更新的oraclize完成
EN

Ethereum用户
提问于 2018-08-12 20:11:59
回答 2查看 117关注 0票数 0

我使用oraclize-api获取并存储twitter帖子到智能契约中。文章被放置到mapping中,使用twitter作为键(即<username>/status/<id>),tweet文本作为值。

我希望在调用oraclize __callback函数并将tweet文本保存到智能契约之后,前端显示tweet文本。

我所接受的选择包括:

  • 有一个按钮供用户手动“检查状态”
  • 执行一个循环来检查不是""的tweet文本值

两者都不太好,特别是如果Oraclize有问题的话,比如状态永远不会更新的气体外错误。

有推荐的做法吗?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2018-08-17 23:33:17

最后,我对异步函数进行了递归调用,以支持此场景。

就像这样:

代码语言:javascript
运行
复制
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")
    }
},

函数接受一个参数,如果需要太长时间,该参数可用于超时操作。

票数 0
EN

Ethereum用户

发布于 2018-08-18 03:28:43

您可以编写回调函数以发出事件,然后在前端使用web3侦听具有该名称的事件。

因此,在处理回调tx时,事件将被发出,如果您在dApp上侦听此类事件,您将有机会对其采取行动。你不需要做任何无限循环,只要听事件。

如果由于某种原因没有触发Oraclize,您的dapp将永远不会接收到事件,在这个事件中,我以为您可以超时或其他什么的。如果收到回调,但由于与您为函数编写的实际代码有关的原因,则相同的场景。不过,您将能够知道它已恢复并相应地失败了。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/56365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档