Ожидание звонка, чтобы закончить и затем отправить действие в саге - PullRequest
0 голосов
/ 26 марта 2019

Я хочу позвонить на сервер и затем использовать эти данные для отправки других действий.

export function* function1(actions) {
      console.log('inside');
      try {
        console.log('getting past orders list');
        const url = `/api/getOrders`;
        let reqsData = {
          order_id: actions.payload.order_id
        };
        const data = yield call(request, { url, method: 'POST', data:reqsData })
        console.log(data);
        console.log('///////////////////////////////////');
        if (!data.error) {
          console.log(data)
          yield put({ type: 'nowThis', payload: actions.payload.data });
        } else {
          console.log('---------------------------------')
          console.log('got some error');
        }
      } catch (error) {
        console.log(error)
      }
    }

Но рядом со строкой не запускается код
const data = вызов yield (запрос, {url, метод: 'POST', data: reqsData})
У меня есть аналогичный код, который раньше работал правильно + я проверил сеть и получаю ответ 200 для этой строки.
Я использовал fork вместо call , но он запускает мой код рядом с этой строкой до завершения вызова.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Похоже, ваш request метод не возвращается должным образом. Оберните это в Promise:

request() {
  return new Promise(resolve => {
    myApiCall().then(response => {
      resolve(response);
    }).catch(e => {
      reject(e);
    });
  });
}

и затем в своей саге вы можете yield как обычно:

const data = yield call(request, { url, method: 'POST', data:reqsData })
0 голосов
/ 26 марта 2019

вызов yield принимает функцию и аргументыНапишите метод для вызова службы.Вы можете использовать пакет axios npm (axios.get ('../ url', params: {params})) и вызывать эту функцию в вызове yield.

вызов выхода (methodToCallApi (), params, to, метод).Кроме того, лучше, если вы храните вызовы служб в отдельном файле и просто вызываете эти методы в saga, а не определяете их непосредственно в saga.

...