Solidity

在 Vue 應用程序的頁面刷新時無法從塊 0 載入事件

  • July 14, 2019

我正在嘗試使用events方法從 web3 API 獲取事件數據。在我的 Vue 應用程序方法中,我有一個方法 ,newDsoValue它將從一開始就監視事件以及每個新觸發的事件。

該方法僅在第一次(當我更改程式碼塊中的某些內容並保存時)才能正常工作。

但是如果我刷新瀏覽器選項卡,它不會載入過去的事件,而是只會載入新的觸發事件。

我用來載入事件數據的方法用於獲取smart contracts寫入solidity並部署在乙太坊區塊鏈上的事件。APIweb3:1.0.0-beta.37用於獲取事件數據。

我已經嘗試過安裝掛鉤,但沒有運氣。

我還嘗試使用其他瀏覽器清除瀏覽器記憶體,但沒有運氣。

如果我使用按鈕點擊手動呼叫此方法,那麼它也可以正常工作。

我曾經在方法內部的 API 呼叫之前和之後在控制台中記錄一些值,每次頁面刷新時,該值都會完美地記錄在控制台中。只有過去的數據不會被載入。

在我的方法中,我將數據推送到array. 通過調試,我知道數組僅在第一次載入事件時,如果我刷新頁面,數組就會變為空。

這是方法:

newDsoValue() {
     AssetLoggingContract.events
       .RejectSetValue({
         fromBlock: 0
       })
       .on("data", event => {
         this.testEvents.push(event);
         console.log(this.testEvents.length);
       })
       .on("error", console.error);
   },

我在createdas 中呼叫此方法:

created() {
   this.newDsoValue();
 }

我想在頁面載入時執行此方法,並且每次刷新頁面時它都應該載入所有以前的事件以及新觸發的事件。有什麼幫助來實現這一目標嗎?謝謝

GitHub 倉庫

經過數小時的研究,我發現無論是程式碼塊還是Vue.js. 問題出在web3API 版本上,似乎是web3:1.0.0-beta.37.

我更新到最新版本"web3": "^1.0.0-beta.55"並解決了這個問題。

參考: 無法接收事件 #1260

引用自:https://ethereum.stackexchange.com/questions/72842