如何使用 yield put inside yield all

How to use yield put inside yield all

我想拨打 n 次 api 电话,我正在做 floows

   try {
    ....
     yield all(
          action.uploadDocsBody.map(u =>
            call(uploadDocs, {
              ...,

            }),
          ),
        );

     yield put({
      type: UPLOADDOCS_COMPLETED,
      payload: { statusText: 'Success' },
    });

 } catch (e) {

    yield put({
      type: UPLOADDOCS_FAILED,
      payload: {
        error: true,
      },
    });
  }

问题是 UPLOADDOCS_COMPLETED 仅在完成所有 api 次调用后才被调用。

我想在每次 api 调用后产生 put 如何使用它?

您可以用另一个生成器包装每个调用,然后生成它:

function *foo(u) {
 yield call(uploadDocs, {...});
 yield put({ type: UPLOADEDDOCS_COMPLETED, .....});
}

yield all(action.uploadDocsBody.map(u => foo(u)))
function call(uploadDocs,{...},callback){
  /// do you task
    callback()
}   
function *foo(u) {
  var put  =  function({ type: UPLOADEDDOCS_COMPLETED, .....});   
 yield call(uploadDocs, {...} ,put);

}