Мне нужен метод, чтобы вернуть обещание после nextTick (или тайм-аут) - PullRequest
0 голосов
/ 12 июля 2019
  1. Метод должен возвращать Promise
  2. Это обещание должно быть new после или после nextTick

Так что в основном мне нужен метод, который запускается перед тикоми возвращает значение, которое рассчитывается после отметки.

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
    }
}

Ответы [ 2 ]

0 голосов
/ 12 июля 2019
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());
    });
  });
},
0 голосов
/ 12 июля 2019

Чтобы достичь желаемого, вы можете использовать функцию async:

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

Асинхронная функция возвращает обещание и позволяет использовать await для ожидания разрешения любых указанных обещаний, прежде чем продолжить. Я создал простой пример этого на CodeSandbox здесь: https://codesandbox.io/embed/vue-template-6qny6.

Если вы хотите выполнить код в ответ на повторную визуализацию или изменение элемента, было бы лучше создать событие из этого дочернего компонента и прослушать это событие из родительского элемента. Или, если вам нужно это вычисляемое свойство как в дочернем, так и в родительском элементах, вы можете перенести логику для него в родительский компонент и передать его в качестве реквизита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...