首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue,等待Watch

Vue,等待Watch
EN

Stack Overflow用户
提问于 2020-07-31 16:33:34
回答 2查看 10.9K关注 0票数 5

我的应用程序中也有类似的架构。

代码语言:javascript
复制
computed(){ 
   someStoreValue = this.$store.someStoreValue; 
}
watch() { 
   someStoreValue() = async function () { 
    //do some async action 
   
   }
}, 
methods: { 
  someAction() {        
     this.$store.someStoreValue = 'NEW VALUE'     
     //await for "watch" 

     //do stuff

  }
}

我需要"someAction“等待"someStoreValue”监视器结束。我需要这种架构的someStoreValue可以在很多地方改变。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-31 16:50:33

当然,你不能让你的观察者同步,这是非常没有意义的,因为你想要的数据已经到达了。

代码语言:javascript
复制
someStoreValue(newValue, oldValue) { 
    // But you can still call other async functions. 
    // Async functions are just functions that returns a promise. Thus:
    doSomeAsyncAction().then(this.someAction)
}

那么,为什么不直接用someAction来做你的异步工作呢?

代码语言:javascript
复制
watch:{ 
    someStoreValue(newValue, oldValue) { 
        this.someAction()
    }
},
methods:{
    async someAction(){
        await doSomeAsyncStuff() // What prevents you from doing this?
        //do stuff
    }
}
票数 10
EN

Stack Overflow用户

发布于 2020-11-19 15:58:53

您可以使用标志并等待它。

代码语言:javascript
复制
data() {
   return {
      flag: false
   }
},
watch() { 
   someStoreValue() = async function () { 
    //do some async action 
  
     flag = true;  
   }
}, 
methods: { 
  async someAction() {        
     this.$store.someStoreValue = 'NEW VALUE'     
     await new Promise((resolve) => {
       if (this.flag) {
         resolve();
       } else {
         const unwatch = this.$watch('flag', (newVal) => {
           if (newVal) {
             unwatch();
             resolve();
           }
         });
       }
      });

     //do stuff

  }
}

也许在这种情况下@ippi解决方案更好,但您可以在其他情况下使用此方法。

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

https://stackoverflow.com/questions/63188422

复制
相关文章

相似问题

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