Почему часы не запускаются, когда я использую Promise?

Я использую @vue/composition-apiи usePromise из vue-composable.

Я наблюдаю за вычисленным значением, возвращаемым из обещания. Обещание разрешается через 12000 мс.

Впервые computed а также watchвызываются, но через 12000 мс ни один из них не вызывается. поэтому обратный вызов часов не работает. изменяется даже api.result.

Я вижу, что это значение изменилось в шаблоне, напечатав: {{items}}.

Как решить эту неожиданную проблему? как вызвать обратный вызов часов при изменении значения?

вот результат:

 in computed
 in watch

ожидается:

     in computed
     in watch
     in computed <-- data is resolved the api.result changed (has new value).
     in watch <--- same.

Код:

  setup() {

    function timeout(ms) {
      return new Promise((resolve) => setTimeout(resolve, ms));
    }

    const api = usePromise(() => Promise.all([timeout(12000).then(() => ({ some: 'data'}))]));

    const items = computed(() => {
      console.log('in computed');
      return api.result;
    });

    watch(items, (v) => {
      console.log('in watch');
    })

    api.exec();
    return { items }

Это работает:

  watch(api.result, (v) => {
    console.log('in watch api.result');
  })

Но почему вычисление не работает? как заставить его пересчитать, чтобы часы на вычисленном работали?

Код на codeandbox

0 ответов

Другие вопросы по тегам