我的传奇:
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返回所有对象)
答案 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));
}
处理成功/失败。