У меня есть два фрагмента, перечисленных ниже, а именно sagas.js
и mapUpdates.js
По какой-то причине в файле saga.js строка var venues = yield getVenueCoords()
не ожидает завершения запроса, что, в свою очередь, setUserCoords(venues)
в моем хранилище избыточности как undefined
.
Если я поставлю в конце оператора request
в функции console.log(JSON.parse(body))
, то в конце установки, после того как все другие функции будут запущены в моей саге, у меня будет json, зарегистрированный на консоли.
Мне нужно завершить запрос, прежде чем перейти к setVenueCoords(venues)
, чтобы правильно обновить магазин с данными о месте проведения.
Что я делаю неправильно здесь, и что я могу сделать, чтобы это исправить?
саги.js
import { put, takeEvery, all } from "redux-saga/effects";
import { delay } from "redux-saga";
import { getPreciseLocation, getVenueCoords } from "../utils/mapUpdates";
import {
setUserCoords,
setVenueCoords,
initMapRunning,
initMapComplete
} from "../actions";
function* initMap() {
var userLocation = {};
var userCoords = yield getPreciseLocation().then(function(value) {
return (userLocation = { lat: value[0], lng: value[1] });
});
yield put(setUserCoords(userCoords));
yield delay(3000);
var venues = yield getVenueCoords(userCoords);
yield put(setVenueCoords(venues));
yield put(initMapComplete());
}
function* watchInitMap() {
yield takeEvery("INIT_MAP", initMap);
}
export default function* rootSaga() {
yield all([watchInitMap()]);
}
mapUpdates.js
export function getVenueCoords(userCoords) {
let obj = request(
{
url: "https://api.foursquare.com/v2/venues/explore",
method: "GET",
qs: {
client_id: foursquareID,
client_secret: foursquareSecret,
ll: userCoords,
query: "coffee",
v: "20171114",
limit: 10000
}
},
function(err, res, body) {
if (err) {
console.error(err);
} else {
return JSON.parse(body);
}
}
);
}