Вызовите функцию генератора redux-saga из .map в другой функции

#javascript #reactjs #redux #redux-saga

Вопрос:

Я пытаюсь yield call getdata создать функцию из updateData , но метод не вызывается.

     function* getdata(action) { 
      try {
       let response = yield call(doCall, {
          url: 'https://.....',
          method: GET,
        });
      }catch(e){
      }
    } 
    function* updateData(action) { 
      try {
       let array = ['1', '2', '3'];
         array.map(function* (i){
           return yield call(getdata, { ...action });  // this is not 
                    // calling getdata generator method
        });
      }catch(e){
      }
    }
 

Ответ №1:

Не каждый генератор-это сага. Чтобы библиотека redux-saga обработала его, вам нужно каким-то образом передать его в библиотеку (например, с помощью call или fork ). В этом случае вы можете использовать метод массива map для создания массива эффектов, которые затем можно выполнить с помощью all .

 function* updateData(action) { 
  try {
    let array = ['1', '2', '3'];
    const effectList = array.map(i => call(getdata, { ...action }));
    const result = yield all(effectList);
  }catch(e){
  }
}