Объем данных в vue. js модуле - PullRequest
0 голосов
/ 30 апреля 2020

В моем файле / модуле vue. js содержится следующий код:

 export default {
  name: 'App',
  data () {
    return {
      web3: null,
      account: null,
      contractInstance: null,
      userAccount: null
    }
  },
  mounted () {
    web3Cont().then((res) => {
      this.web3 = res
      this.contractInstance = new this.web3.eth.Contract(contractAbi, contractAddress)
      this.web3.eth.getAccounts().then((accounts) => {
        [this.account] = accounts
        console.log(accounts)
      }).catch((err) => {
        console.log(err, 'err!!')
      })
    })
    setInterval(function () {
      // Check if account has changed
      if (this.userAccount !== this.account) {
        this.account = this.userAccount
        this.updateInterface()
      }
    }, 1000)
  }
}

Насколько я понимаю, переменная, экспортируемая в функцию data (), должна иметь "глобальный" msgstr "область действия внутри файла. Однако, хотя я присваиваю значение переменной "account" в функции web3Cont, это значение все еще не определено при выполнении функции setInterval.

Что мне не хватает?

Спасибо. J

1 Ответ

1 голос
/ 30 апреля 2020

this теперь принадлежит функции, переданной setInterval.

У вас есть пара опций:

function onInterval () {
  if (this.userAccount) {
  //
  }
}

setInterval(onInterval.bind(this), 1000);

или

setInterval(() => {
  if (this.userAccount) {
    //
  }
}, 1000);

См. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this для справки.

В большинстве случаев значение этого параметра определяется способом вызова функции (привязка во время выполнения). Он не может быть установлен присваиванием во время выполнения и может отличаться при каждом вызове функции. ES5 ввел метод bind () для установки значения функции this независимо от того, как она вызывается, а ES2015 представил функции-стрелки, которые не обеспечивают собственную привязку this (он сохраняет значение this лексического контекста).

...