Redux Saga выполняет несколько HTTP-запросов - PullRequest
0 голосов
/ 10 января 2019

Как выполнить несколько запросов http в саге redux для этой полезной нагрузки:

 [
  {
    "product_ids": [
      "e331e78b-e954-4de3-9bb3-80827b0d0741"
    ],
    "body": {
      "command": "request",
      "data": {
        "api_key": "errtrt4i548",
        "api_username": "xxxx",
        "vendor_type": 1,
        "from": {
          "from_description": ""
        },
        "to": {
          "to_name": "Fat Rain Films",
          "to_lat": 36.77254990000006,
          "to_long": -1.2711643,
          "to_description": ""
        }
      }
    }
  },
  {
    "product_ids": [
      "9331e78b-e954-4de3-9bb3-80827b0d0741"
    ],
    "body": {
      "command": "request",
      "data": {
        "api_key": "errtrt4i548",
        "api_username": "xxxx",
        "vendor_type": 1,
        "from": {
          "from_description": ""
        },
        "to": {
          "to_name": "Fat Rain Films",
          "to_lat": 36.77254990000006,
          "to_long": -1.2711643,
          "to_description": ""
        }
      }
    }
  }
]

И мой код саги:

export function* getQoute({ qoute }) {
  yield put(updateNetworkStatus(true));

  const headers = {
    method: 'POST',
    // credentials: 'include',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(qoute),
  };
  const total = 0;
  try {
    const req = yield call(
      request,
      `${API_BASE}/shippings/shipping/initiate_delivery_sendy/`,
      headers,
    );
    console.log(req);
    // total += req.
  } catch (err) {
    console.log(err.message);
    //yield put(updateLoadingStatus(false));
  }
}

Проблема, с которой я сталкиваюсь, заключается в том, чтобы найти способ вызвать мой API с данными в моей полезной нагрузке. т.е. вызовите API 2 раза или столько же, сколько объектов в моей полезной нагрузке json в одной и той же саге или действии.

1 Ответ

0 голосов
/ 10 января 2019

В вашем случае вы можете перебирать массив json и отправлять действие для вызова вашей саги с каждым объектом в качестве полезной нагрузки.

Скажем, у меня есть полезные данные массива [2] = {obj1, obj2}. Тогда сделай

var i;
for (i = 0; i < payloads.length; i++) { 
yield put({type: YOUR_ACTION_TYPE_FOR_SAGA, payload: payloads[i]});
}
...