Dva: Apakah menggunakan async/menunggu untuk melakukan efek asinkron tidak berfungsi? Apakah saya harus menggunakan */yield?

Dibuat pada 9 Okt 2016  ·  11Komentar  ·  Sumber: dvajs/dva

efek: {

/**
 * 数据查询
 * 
 * <strong i="6">@param</strong> {any} { payload }
 * <strong i="7">@param</strong> {any} { select, call, put }
 */
query: async function ({ payload }, { select, call, put }) {
  await put({ type: 'show_loading' });
  payload.page = payload.page || 1;
  payload.limit = payload.limit || 10;
  let data = await call(query, '/home/course', payload);
  if (data) {
    await put({
      type: 'query_success',
      payload: {
        list: data.data,
        total: data.count,
        current: data.currentPage,
      },
    });
  }
}

},

faq

Komentar yang paling membantu

@sorrycc Karena Anda juga menyebutkan skenario apa yang perlu digunakan batal di sini, pada kenyataannya, async/menunggu sudah cukup dalam banyak kasus. Dalam penggunaan saat ini, gunakan generator/yield untuk memanggil async/await. Ini terlalu menyakitkan. Penulis dapat mempertimbangkan untuk mendukung kedua mode secara bersamaan dan membiarkan pengguna memilih sendiri, seperti menambahkan item konfigurasi dan memanggil mode async/await setelah pembukaan , Atau penilaian adaptif.

Semua 11 komentar

efek: {

/**
 * 数据查询
 * 
 * <strong i="6">@param</strong> {any} { payload }
 * <strong i="7">@param</strong> {any} { select, call, put }
 */
query: function* ({ payload }, { select, call, put }) {
  yield put({ type: 'show_loading' });
  payload.page = payload.page || 1;
  payload.limit = payload.limit || 10;
  let data = yield call(query, '/home/course', payload);
  if (data) {
    yield put({
      type: 'query_success',
      payload: {
        list: data.data,
        total: data.count,
        current: data.currentPage,
      },
    });
  }
}

},

Ya, efek hanya mendukung kata-kata generator. async dan await dapat digunakan di luar efek, lalu gunakan panggilan hasil untuk menyesuaikan efek.

Saya mengerti, terima kasih Tuhan

Permisi, apakah efek memiliki kesempatan untuk mendukung async di masa mendatang? @maaf

Async tidak memiliki generator yang dapat dikontrol, seperti cancel , itulah sebabnya redux-saga memilih untuk menggunakan generator.

Oh

@sorrycc Bagaimana saya bisa membatalkan efek?

@miaojiuchen Apa adegannya? Mengapa membatalkan efek?

@sorrycc saya menemukan skenario ini:

  • efek 1: Permintaan berhasil, nomor dikembalikan, dan efek 2 disebut-penghitung pengurangan diproses
  • efek 2: while(true) => tunda dan kemudian kirim peredam

Ini bagus pada satu halaman, tetapi jika Anda mengunjungi halaman lain dan kemudian kembali ke halaman sebelumnya, efek 2 akan diulang.
Bagaimana saya bisa membatalkan efek di efek 1 dan kemudian memicu efek 2?
Apakah saya harus menggunakan jalur berlangganan untuk memanggil @@CANCEL_EFFECTS?

Terima kasih.

@sorrycc Karena Anda juga menyebutkan skenario apa yang perlu digunakan batal di sini, pada kenyataannya, async/menunggu sudah cukup dalam banyak kasus. Dalam penggunaan saat ini, gunakan generator/yield untuk memanggil async/await. Ini terlalu menyakitkan. Penulis dapat mempertimbangkan untuk mendukung kedua mode secara bersamaan dan membiarkan pengguna memilih sendiri, seperti menambahkan item konfigurasi dan memanggil mode async/await setelah pembukaan , Atau penilaian adaptif.

Anda dapat mencoba redva , kerangka kerja

Apakah halaman ini membantu?
0 / 5 - 0 peringkat