Dva: Bagaimana cara mengeluarkan fetch/ajax dan memperbarui status secara bersamaan?

Dibuat pada 27 Jun 2017  ·  7Komentar  ·  Sumber: dvajs/dva

Ada kolom data dalam tabel yang perlu diperbarui melalui permintaan ajax, dan berapa banyak permintaan ajax yang harus dikeluarkan sebanyak baris, jika diteruskan ke efek:

for (let i = 0; i < content.length; i++) {
   const status = yield call(service.status, id)
   content[i].status = status
   yield  put({type: 'updateState', payload: {content: content,}})
}

Untuk memperbarui dengan cara ini, permintaan akan menyelesaikan satu permintaan dan meminta yang berikutnya, dan efisiensinya tidak terlalu tinggi. Diharapkan ajax ini dapat dikeluarkan secara bersamaan, yaitu, tanpa jeda melalui hasil, dan pada saat yang sama memperbarui status tepat waktu (keadaan diperbarui setelah permintaan berhasil). Saya ingin tahu dewa mana yang dapat memberikan beberapa petunjuk?

Tabel menggunakan ant.design.

Komentar yang paling membantu

  • Jika Anda ingin menunggu semua hasil kembali sebelum diproses, Anda dapat menggunakan semua
*fetch(action, { call, all }) {
const [demands, orders, mediaorders] = yield all([
        call(fetch, {
          resource: 'stat/demands',
        }),
        call(fetch, {
          resource: 'stat/orders',
        }),
        call(fetch, {
          resource: 'stat/mediaorders',
        })
      ])
}
  • Jika Anda ingin memproses salah satu permintaan dengan hasil pengembalian, Anda dapat menggunakan ras
*fetch(action, { callWithLoading, put, race }) {
const [demands, orders, mediaorders] = yield race (...)

Redux-saga dapat melihat dokumentasi saga

Semua 7 komentar

Pertanyaan yang sama

1. Hasil tidak ada hubungannya dengan konkurensi, kan? Permintaan ini harus bersamaan (tidak yakin)
2. Mengapa tidak menggabungkannya menjadi satu permintaan?

const results = yield [fun1(), fun2(), fun3()];

atau

function * fun(id) {}
const results = yield ids.map(fun);
const [demands, orders, mediaorders] = yield [
    call(fetch, {
        resource: 'stat/demands',
    }),
    call(fetch, {
        resource: 'stat/orders',
    }),
    call(fetch, {
        resource: 'stat/mediaorders',
    })
]

ambil dapat mengembalikan Promise.all

@helloyou2012 Tetapi cara penulisan ini bersamaan, tetapi Anda harus menunggu sampai semua permintaan selesai untuk mendapatkan hasilnya.Jika salah satu permintaan habis, semua data tidak akan tersedia.

  • Jika Anda ingin menunggu semua hasil kembali sebelum diproses, Anda dapat menggunakan semua
*fetch(action, { call, all }) {
const [demands, orders, mediaorders] = yield all([
        call(fetch, {
          resource: 'stat/demands',
        }),
        call(fetch, {
          resource: 'stat/orders',
        }),
        call(fetch, {
          resource: 'stat/mediaorders',
        })
      ])
}
  • Jika Anda ingin memproses salah satu permintaan dengan hasil pengembalian, Anda dapat menggunakan ras
*fetch(action, { callWithLoading, put, race }) {
const [demands, orders, mediaorders] = yield race (...)

Redux-saga dapat melihat dokumentasi saga

Jika Anda menggunakan semua untuk konkurensi, jika permintaan hang, itu akan menimbulkan kesalahan, dan semua data tidak akan tersedia Bagaimana jika Anda ingin melakukan pemrosesan lanjutan pada permintaan yang benar?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat