Почему мой getRequest () в саге не видит данные из json.db после postRequest - PullRequest
0 голосов
/ 25 мая 2019

Мои saga.ts:

export function* postSomething(object:object){  
        yield postRequest(object);
        const Objects=yield getRequest();
        console.log(Objects); 
        yield put(showObject(Objects));
}

** db.json - моя маленькая база данных

Мой db.json пуст в начале и после первого postRequest (объект),У db.json будет один объект, но когда я пытаюсь получить этот объект с помощью getRequest, я получаю [] (пустой массив)!? Почему?

Моя консоль.log (Object) ничего не печатает.

В следующий раз, когда я сделаю postRequest (object) и опубликую в моем db.json еще один объект, это означает, что db.json будет иметь два объекта, но после этого, когда я пытаюсь получить объекты с помощью getRequest (), мой console.log печатает только один объект? Почему?

Как получить все объекты из db.jsonпосле postRequest ()?

postRequest (объект) (объект post для db.json с использованием fetch, метод post) - это сервисная функция, которая взаимодействует с db.json,

getRequest () (fetch (url), который должен вернуть весь объект из db.json).

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Вы должны использовать эффект call из redux-saga API:

export function* postSomething(object:object){  
        yield call(postRequest(object));
        const Objects = yield call(getRequest());
        console.log(Objects); 
        yield put(showObject(Objects));
}

В целом, было бы лучше использовать паттерн с использованием 2 разных саг для обработки каждого запроса.таким образом вы можете справиться с успехом / неудачей с помощью redux гораздо проще и яснее.

0 голосов
/ 26 мая 2019

Это функция генератора, поэтому каждый раз, когда она возвращает, она перезапускается после последнего оператора yield, так что во второй раз она начинается со строки 3.

Redux Saga имеет эффект вызова:

import {call, put} from 'redux-saga/effects';

export function* postSomething(object:object){  
        yield call(postRequest, object);
        const Objects=yield call(getRequest());
        console.log(Objects); 
        yield put(showObject(Objects));
}

В вашем случае, тем не менее, похоже, что вам, вероятно, следует использовать здесь две саги.

...