NIsham Mahsin
NIsham Mahsin

Reputation: 728

How to use yield put inside yield all

I want to make n number of api call and i am doing as 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,
      },
    });
  }

the issue is that UPLOADDOCS_COMPLETED being called only after finishing all the api calls.

I want to yield put after every api call how can use it ?

Upvotes: 0

Views: 1279

Answers (2)

divyang4481
divyang4481

Reputation: 1783

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

}

Upvotes: 1

MorKadosh
MorKadosh

Reputation: 6006

You can wrap each call with another generator, and yield it:

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

yield all(action.uploadDocsBody.map(u => foo(u)))

Upvotes: 1

Related Questions