cari

Rumah  >  Soal Jawab  >  teks badan

Apabila menggunakan @pinia/nuxt, permintaan HTTP yang dilaksanakan dalam gelung setInterval dilaksanakan pada setiap lelaran setInterval.

<p>Saya cuba membina pemasa menggunakan @pinia/nuxt dan nuxt 3. Apabila pemasa bermula, saya juga ingin memulakan permintaan HTTP untuk menyegerakkan pangkalan data saya. </p><p>Masalah yang saya hadapi ialah apabila saya memanggil tindakan permulaan, permintaan HTTP dilaksanakan pada setiap lelaran gelung setInterval, sedangkan saya hanya mahu ia dilaksanakan sekali. </p><p>Berikut ialah modul pinia saya. Saya memanggil tindakan permulaan melalui acara onClick dalam komponen. </p><p><kod></kod><kod></kod></p> <pre class="brush:php;toolbar:false;">nyatakan: () => pemasa: { id: null, isRunning: palsu, masa: 5, pemasa: 0, negeri: null, } sebagai Pemasa, }), tindakan: { mula() { this.timer.isRunning = benar this.syncTimer() jika (!this.timer.timer) { this.timer.timer = setInterval(() => { if (this.timer.time > 0) { this.timer.time-- } lain { clearInterval(this.timer.timer) this.reset() } }, 1000) } }, berhenti() { this.timer.isRunning = palsu clearInterval(this.timer.timer) this.timer.timer = 0 }, set semula() { this.stop() this.timer.time = 1500 }, syncTimer() { backendAPI<Pemasa>('/api/timer', { kaedah: 'POST', badan: this.timer }).then(({ ralat, data }) => { jika (!error.value) { const id = data.value?.id ?? this.timer.id = id this.timer.state = "dicipta" } }) } }</pre> <p>Fail packages.json saya adalah seperti berikut:</p> <pre class="brush:php;toolbar:false;">"devDependencies": { "@fortawesome/fontawesome-free": "^6.4.0", "@fullcalendar/core": "^6.1.8", "@fullcalendar/daygrid": "^6.1.8", "@fullcalendar/interaction": "^6.1.8", "@fullcalendar/timegrid": "^6.1.8", "@fullcalendar/vue3": "^6.1.8", "@iconify/vue": "^4.1.1", "@kevinmarrec/nuxt-pwa": "^0.17.0", "@mdi/font": "^7.2.96", "@nuxtjs/google-fonts": "^3.0.0", "@pinia-plugin-persistedstate/nuxt": "^1.1.1", "nuxt": "3.4.2", "sass": "^1.62.0", "vuetify": "^3.1.15" }, "kebergantungan": { "@pinia/nuxt": "^0.4.11", "pinia": "^2.1.3", "vite-plugin-vuetify": "^1.0.2" }</pre> <p><br /></p>
P粉596191963P粉596191963516 hari yang lalu558

membalas semua(1)saya akan balas

  • P粉384679266

    P粉3846792662023-07-28 11:53:00

    Seperti yang saya nyatakan dalam ulasan, cara yang betul untuk melaksanakan fungsi masa nyata ialah menggunakan soket. Walau bagaimanapun, jika anda perlu melakukannya dengan cara pengundian, anda boleh menulis pengawal, sama seperti contoh berikut:

    actions: {
      start() {
        if (this.timer.isRunning) return;
    
        this.timer.isRunning = true;
        this.syncTimer();
    
        this.timer.timer = setInterval(() => {
          if (this.timer.time > 0) {
            this.timer.time--;
          } else {
            clearInterval(this.timer.timer);
            this.reset();
          }
        }, 1000);
      },
      // ...
    }

    Sepatutnya ok

    balas
    0
  • Batalbalas