为什么我的传奇中的getRequest()在postRequest之后没有看到json.db中的数据

时间:2019-05-25 19:43:35

标签: javascript react-redux fetch redux-saga saga

我的传奇:

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

** db.json是我的小数据库

我的db.json开头是空的,在第一个postRequest(object)之后,db.json将有一个对象,但是当我尝试使用getRequest获取该对象时,我得到了[](空数组)! strong> 为什么?

我的console.log(Object)不打印任何内容。

下次我执行postRequest(object)并将另一个对象发布到db.json时,这意味着db.json将具有两个对象,但是在此之后,当我尝试使用getRequest()提取对象时,控制台.log仅打印一个对象? 为什么?

如何在postRequest()之后从db.json获取所有对象?

postRequest(object)(使用fetch将对象发布到db.json,方法“ post”)是与db.json通信的服务功能,

getRequest()(fetch(url),它需要从db.json返回所有对象)

2 个答案:

答案 0 :(得分:0)

这是一个生成器函数,因此每次返回时,它都会在最后一个yield语句之后重新启动,因此第二次通过时,它从第3行开始。

Redux传奇具有通话效果:

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));
}

不过,就您而言,看来您可能应该在这里使用2条链式萨加斯。

答案 1 :(得分:0)

您应该使用type newType = ResourcesKey | string; enum ResourcesKey { FirstString = 'path', } function isResourceKey(o: newType): o is ResourcesKey { return Object.keys(ResourcesKey).some(k => ResourcesKey[k as keyof typeof ResourcesKey] === o); } function doStuff(instance: newType) { if (isResourceKey(instance)) { console.log(`Res: ${instance}`) // instance: ResourcesKey } else { console.log(`Str: ${instance}`) // instance: string } } doStuff("") doStuff(ResourcesKey.FirstString) doStuff("path") // still resource API的call效果:

redux-saga

通常,最好使用2个不同的Sagas来处理每个请求。这样,您可以更轻松,更清晰地使用export function* postSomething(object:object){ yield call(postRequest(object)); const Objects = yield call(getRequest()); console.log(Objects); yield put(showObject(Objects)); } 处理成功/失败。