Обратите внимание на следующую функцию ES6. Мое намерение - получить данные направления с карт Google. Функция карты google берет начало, место назначения, travelMode и обратный вызов в качестве параметров.Выход в генераторе обратного вызова не активирован
// Get direction data from Google API. Individual exports for testing
export function* fetchDirections() {
const mapApiGoogle = yield select(selectMapApiGoogle());
const google = mapApiGoogle.library;
const origin = yield select(selectOrigin());
const destination = yield select(selectDestination());
new google.maps.DirectionsService().route({
origin: new google.maps.LatLng(origin.lat, origin.lng),
destination: new google.maps.LatLng(destination.lat, destination.lng),
travelMode: google.maps.TravelMode.DRIVING,
}, function* (result, status) {
if (status === google.maps.DirectionsStatus.OK) {
yield put(MapDirectionsRequestedGoogleSuccess(result));
} else {
yield put(MapDirectionsRequestedGoogleError(result));
}
}
);
}
Проблема заключается в том, когда выполняется и обратный вызов с результатом называется функция DirectionService(). Маршрут(), мои fetchDirections() генератор не распознает выход в функции обратного вызова. Как мне изменить код выше, чтобы иметь возможность использовать доходность в функции обратного вызова?
ОБНОВЛЕНИЕ: Обычно я использую генератор в редукционной саге. Для целей тестирования я вызываю генератор, как показано ниже. Я просто понял, что генератор обратного вызова не получает экземпляр, поэтому внутренний доход никогда не будет достигнут. Вы знаете, как управлять внутренним генератором обратного вызова из fetchDirections() или как проверить результат?
describe('fetchDirections',() => {
let fetchSaga = false;
const googleStub = {
maps: {
LatLng: function (lat, lng) {
return { lat, lng }
},
TravelMode: {
DRIVING: 'DRIVING'
},
DirectionsStatus: {
OK: 'OK'
}
}
};
beforeEach(() => {
fetchSaga = fetchDirections();
const selectDescriptor = fetchSaga.next().value;
expect(selectDescriptor).toEqual(select(selectMapApiGoogle()));
});
it('should invoke directions api',() => {
googleStub.maps.DirectionsService =() => {
return {
route: function(origin, destination, travelMode, callback) {
callback('directions','OK');
}
}
};
const putDescriptor = fetchSaga.next({ library: googleStub }).value;
expect(putDescriptor).toEqual(put(MapDirectionsRequestedGoogleSuccess('directions')));
});
});
Как вы используете свой генератор? Можете ли вы показать код, в котором вы его используете? – nils
Для справки, я добавил раздел UPDATE – DsnKov