可变阶段使返回不确定

时间:2018-08-16 23:51:51

标签: javascript variables

嗨,我正在尝试从函数test()获取结果,并使用它来设置变量stageIs,但是它一直在返回undefined。我已经尝试解决了几个小时,对您的任何帮助将不胜感激。

var stage;
import { CONTRACT } from '../contract'
import _ from 'lodash'

export default {
  data () {
    return {
      stageIs: null,
      amount: null
    }
  },

  mounted () {
    this.coinbase = CONTRACT._eth.coinbase
    this.test()
  },

  methods: {
    test () {
      CONTRACT.name1(function(err, res) {   
        stage = (res);      
      });
      alert(stage);
      this.stageIs= (stage)   
    }

当我在test()内执行警报时,它可以工作,但是由于某种原因它不会设置{{ stageIs }}

test () {
  CONTRACT.name1(function(err, res) {   
    stage = (res);
    alert(stage)
    this.stageIs = (stage)
 })

1 个答案:

答案 0 :(得分:0)

您有一个匿名函数作为CONTRACT.name1的参数。通过此匿名函数的签名,name1似乎是异步的。

因此,对name1的调用将立即返回,而原本应该由name1完成的工作将在事件循环中稍后执行(或正在等待IO)。结果,stage将始终是未定义的。

您要执行的操作是:

test () {
  let that = this;
  CONTRACT.name1(function(err, res) {   
    stage = (res);
    alert(stage)
    that.stageIs = stage;
  });
}

这里发生了两件事。当异步函数stage调用回调时,我们正在为name1分配一个值。我们还将在this内分配对test的引用,因为匿名函数将在不同的上下文中执行(因此匿名函数的this会指向其他内容)。

或者,您也可以使用箭头函数摆脱this绑定问题。

test () {
  CONTRACT.name1((err, res) => {   
    stage = (res);
    alert(stage)
    this.stageIs = stage;
  });
}