В приведенном ниже коде вы назначаете обещание для response
, затем console.log
это обещание, а затем возвращаете действие с payload
, установленным для этого обещания.
const response = unsplash.search
.photos(term, 1, 20)
.then(toJson)
.then(json => json)
.then(json => json)
console.log(response.then(results => results));
return {
type: RECEIVE_PHOTOS,
payload: response
};
dispatch(receivePhotos(term));
затем отправляет это действие, по-прежнему с полезной нагрузкой в качестве обещания. возможно это сработало бы, если бы у вас было промежуточное программное обеспечение, способное справиться с этим.
Это использование диспетчеризации предполагает, что вы используете избыточный поток.
В этом случае вы должны сделать то же самое с receivePhotos
, включить вызов fetchPhotos
и прекратить действие unsplash
.
const unsplashClient = new Unsplash({
applicationId:
"id",
secret: "secret",
callbackUrl: "callback"
});
export const receivePhotos = term => dispatch => {
dispatch(fetchPhotos());
return unsplashClient.search
.photos(term, 1, 20)
.then(toJson)
.then(json => dispatch({
type: RECEIVE_PHOTOS,
payload: json
});
}
В конце я хотел бы предложить немного рефакторинга действий и (связанных редукторов), таких как:
const unsplashClient = new Unsplash({
applicationId:
"id",
secret: "secret",
callbackUrl: "callback"
});
export const fetchingPhotos = payload => ({
type: FETCHING_PHOTOS, payload
});
export const setPhotos = payload => ({
type: SET_PHOTOS, payload
});
export const fetchPhotos = term => dispatch => {
dispatch(fetchingPhotos(true));
return unsplashClient.search
.photos(term, 1, 20)
.then(toJson)
.then(json => {
dispatch(setPhotos(json));
dispatch(fetchingPhotos(false));
});
}