Dva: 効果で非同期を行うためにasync / awaitを使用することは機能しませんか? * / yieldを使用する必要がありますか?

作成日 2016年10月09日  ·  11コメント  ·  ソース: dvajs/dva

効果:{

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

最も参考になるコメント

@sorryccここでcancelを使用する必要があるシナリオについても

全てのコメント11件

効果:{

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

}、

はい、エフェクトはジェネレーターの表現のみをサポートします。 asyncawaitは効果の外で使用でき、yield呼び出しを使用して効果を調整できます。

分かります、神に感謝します

すみません、エフェクトは将来非同期をサポートするチャンスがありますか? @sorrycc

Asyncには、 cancelなどの制御可能なジェネレーターがありません。そのため、redux-sagaはジェネレーターの使用を選択します。

ああ

@sorryccエフェクトをキャンセルするにはどうすればよいですか?

@miaojiuchenシーンは何ですか?なぜエフェクトをキャンセルするのですか?

@sorrycc私はこのシナリオに遭遇しました:

  • 効果1:要求が成功し、数値が返され、効果2が呼び出されます-減算カウンターが処理されます
  • 効果2:while(true)=>遅延してからレデューサーをディスパッチする

これは1つのページでは問題ありませんが、他のページにアクセスして前のページに戻ると、効果2が繰り返されます。
エフェクト1のエフェクトをキャンセルしてから、エフェクト2をトリガーするにはどうすればよいですか?
@@ CANCEL_EFFECTSを呼び出すには、パスサブスクリプションを使用する必要がありますか?

ありがとう。

@sorryccここでcancelを使用する必要があるシナリオについても

あなたはredvaを試すことができます、同じ

このページは役に立ちましたか?
0 / 5 - 0 評価