Dva: Funktioniert die Verwendung von async/await für asynchrone Effekte in Effekten nicht? Muss ich */Yield verwenden?

Erstellt am 9. Okt. 2016  ·  11Kommentare  ·  Quelle: dvajs/dva

Auswirkungen: {

/**
 * 数据查询
 * 
 * <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

Hilfreichster Kommentar

@sorrycc Da Sie auch erwähnt haben, welche Szenarien Sie hier verwenden müssen, ist async/await in den meisten Fällen ausreichend. In der aktuellen Verwendung verwenden Sie generator/yield, um async/await aufzurufen. Dies ist zu mühsam. Der Autor kann erwägen, beide Modi gleichzeitig zu unterstützen und den Benutzern die Auswahl selbst überlassen, z nach dem Öffnen oder adaptives Urteilsvermögen.

Alle 11 Kommentare

Auswirkungen: {

/**
 * 数据查询
 * 
 * <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,
      },
    });
  }
}

},

Ja, Effect unterstützt nur den Wortlaut des Generators. async und await können außerhalb des Effekts verwendet werden und dann den Yield-Aufruf verwenden, um den Effekt anzupassen.

Ich verstehe, danke Gott

Entschuldigung, wird Effect in Zukunft eine Chance haben, Async zu unterstützen? @sorrycc

Async hat keinen steuerbaren Generator, wie etwa cancel , weshalb redux-saga sich dafür entscheidet, den Generator zu verwenden.

Oh

@sorrycc Wie kann ich einen Effekt abbrechen?

@miaojiuchen Was ist die Szene, warum den Effekt abbrechen?

@sorrycc Ich bin auf dieses Szenario gestoßen:

  • Effekt 1: Die Anfrage ist erfolgreich, eine Zahl wird zurückgegeben und Effekt 2 wird aufgerufen – der Subtraktionszähler wird verarbeitet
  • Effekt 2: while(true) => verzögern und dann den Reducer versenden

Dies ist auf einer Seite in Ordnung, aber wenn Sie andere Seiten besuchen und dann zur vorherigen Seite zurückkehren, wird Effekt 2 wiederholt.
Wie kann ich den Effekt in Effekt 1 abbrechen und dann Effekt 2 auslösen?
Muss ich Pfadabonnements verwenden, um @@CANCEL_EFFECTS aufzurufen?

Danke.

@sorrycc Da Sie auch erwähnt haben, welche Szenarien Sie hier verwenden müssen, ist async/await in den meisten Fällen ausreichend. In der aktuellen Verwendung verwenden Sie generator/yield, um async/await aufzurufen. Dies ist zu mühsam. Der Autor kann erwägen, beide Modi gleichzeitig zu unterstützen und den Benutzern die Auswahl selbst überlassen, z nach dem Öffnen oder adaptives Urteilsvermögen.

Sie können redva ausprobieren, das gleiche

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen