【发布时间】:2020-06-08 20:29:00
【问题描述】:
我可以删除数据并将其添加到我的 JSON 文件中,但如果我一直按下按钮(切换添加/删除),我会遇到网络故障。我假设我不能像这样发出多个请求?
const handleSave = save => {
if (save.toLowerCase() === 'save') {
props
.addSaved({
variables: {
id: props.id,
},
})
.then(res => {
setSaved('Unsave');
setSavedPropData(res.data.addSaved);
});
} else {
props
.deleteSaved({
variables: {
id: savedPropData.id,
},
})
.then(() => setSaved('Save'));
}
};
以上是我的句柄保存数据的sn-p。因此,每次按下它都会切换保存或取消保存,然后它会将数据添加或删除到我的 JSON 中。我目前正在使用 json 服务器来测试应用程序。
const savedMutate = gql`
mutation addSaved($id: String) {
addSaved(id: $id) {
id
}
}
`;
const deletedMutate = gql`
mutation deleteSaved($id: String) {
deleteSaved(id: $id) {
id
}
}
`;
export default _.flowRight(
graphql(savedMutate, {name: 'addSaved'}),
graphql(deletedMutate, {name: 'deleteSaved'}),
)(withNavigation(Card));
如果我将应用程序部署到生产环境中,是否有更好的方法来做到这一点?目前,当我快速切换时,我遇到了网络故障。我刚刚又试了一次,是不是因为我的应用程序每次都会刷新,而在刷新时,我试图保存到我的数据库中,但它还没有完全挂载?这只发生在开发中吗?
突变:
addSaved: {
type: SavedType,
args: {
id: {type: GraphQLString},
},
resolve(parentValue, {id}) {
return axios
.post(`http://localhost:3000/saved`, {id})
.then(res => res.data);
},
},
deleteSaved: {
type: SavedType,
args: {
id: {type: GraphQLString}
},
resolve(parentValue, {id}) {
return axios
.delete(`http://localhost:3000/saved/${id}`)
.then(res => res.data);
},
},
【问题讨论】:
-
错误是什么?您将需要一个中间件来管理请求并在需要时取消正在进行的请求。
-
它更像是一个黄色警告,说网络故障。我注意到每次我提出请求时,我的 nodemon 都会重新启动,因此我的开发应用程序会重新启动。我假设这就是原因,因为我在“刷新”应用程序时发出请求。处理对数据库的同时请求时的最佳实践是什么?如果它在生产中,还会发生这种情况吗?
-
网络故障,请检查原因,如果有道理,请重试。对于对数据库的并发请求,通常有一个中间件管理“请求”或事件队列。然后在更大的范围内,您将需要为您的数据库进行分片和复制 + 一些容错机制(即拜占庭容错)
标签: reactjs react-native graphql refactoring apollo