Vuetify v-progress-linear (неопределенный) не обновляется - PullRequest
0 голосов
/ 26 января 2020

Я работал над этим часами, но не могу найти решение:

Для длительной задачи я использую простое диалоговое окно vuetify v, включающее v-progress-linear бар, чтобы дать визуальную обратную связь с пользователем. Поскольку длительность задачи неизвестна, я использую индикатор выполнения как неопределенный как таковой:

  <v-dialog
      v-model="dialog"
      persistent
      min-width="350"
      max-width="600"
      hide-overlay
    >
      <v-card>
        <v-card-title class="headline grey lighten-2">
          {{ title }}
        </v-card-title>
        <v-card-text>
          <p></p>
          <h3>{{ message }}</h3>
        </v-card-text>
        <v-spacer></v-spacer>
        <v-card-actions>
          <v-spacer></v-spacer>
          <v-progress-linear
            indeterminate
            color="blue"
            class="mb-0"
            width="100%"
          />
        </v-card-actions>
      </v-card>
      <v-card> </v-card>
    </v-dialog>

Я открываю это диалоговое окно перед длительным процессом, который сам упакован в обещание, и закрываю ( скрыть) это когда-то обещание решимости. Концептуально это выглядит следующим образом:

show_dialog();

long_running_task()       // returns a promise
   .then(close_dialog())

Проблема в том, что долго выполняющаяся задача (загрузка, анализ и манипулирование Excel на стороне клиента) занимает не только «долго» (около 10 секунд), но также требует ресурсов. И поскольку это в основном библиотечный вызов, для которого у меня нет исходного кода, у меня есть только один вызов atomi c.

Что теперь происходит, так это то, что индикатор выполнения в компоненте vuetify просто застревает и больше не обновляется, пока не завершится длительный процесс и не освободятся ресурсы. Мое предыдущее убеждение заключалось в том, что обещание может выполняться «по отдельности», и даже если много ресурсов используется, оно позволит выполнять другие задачи, а не просто обнимать все.

Я использую следующую среду:

  • Процессор Intel Core i9-8959HK @ 2,90 ГГц
  • 32 ГБ памяти
  • Firefox
  • Последний JS, Vue, стек Vuetify

Мой вопрос:

  • Не верно ли мое понимание обещаний?
  • Как я могу обеспечить правильное обновление индикатора выполнения, даже если в обещании используется много ресурсов? Или что-то еще происходит, что мне не хватает?

1 Ответ

0 голосов
/ 27 января 2020

Попробуйте это.

   show_dialog();
   long_running_task()
    .then(() => {
     close_dialog()
    })

если этого не произойдет, я покажу вам другой путь

...