代码之家  ›  专栏  ›  技术社区  ›  Tarek Adam

我需要一个方法在下一次检查(或超时)后返回承诺

  •  0
  • Tarek Adam  · 技术社区  · 5 年前
    1. 方法必须返回承诺
    2. 这个承诺必须是 new 下一次检查时或之后

    所以基本上我需要一个方法,它在勾号之前开始执行,并返回一个在勾号之后计算的值。

    methods:{
        myMethod: function(){
             // change this.$data effecting a computed val that is injected into a subelement prop
             //tick
             //grab the subelement by this.$ref
             //return something from that subelement that has been efected by the computed change
        }
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   chipit24    5 年前

    为了实现你想要的,你可以使用 async 功能:

    async myMethod() {
      this.foo = "sup";
      await this.$nextTick();
      console.log(this.$refs.subelement.count);
    }
    

    异步函数返回承诺,并允许您使用 await 等待任何指定的承诺解决后再继续。我在CodeSandbox上创建了一个简单的示例: https://codesandbox.io/embed/vue-template-6qny6 .

    如果要执行代码以响应重新呈现或更改的元素,最好从该子组件发出事件,并从父组件侦听该事件。或者,如果您在子组件和父组件中都需要该计算属性,您可以将其逻辑拉到父组件中,并将其作为道具向下传递。

        2
  •  0
  •   Tarek Adam    5 年前
    primaryPromise: function(foo, bar) {
      // changing foo impacts computed props
      // some of those computed things effect the sub element bar
      this.foo = foo;
    
      return new Promise((resolve, reject) => {
        // a tick grants the time required for the
        // computed changes in foo to propagate into bar 
        this.$nextTick(() => {
          // the resulting sub-promise resolution
          // takes computed changes into account
          resolve(this.$refs[bar][0].subPromise());
        });
      });
    },