Graphql 调用 Axios 多次调用 Performance/Refactoring
Graphql Calling Axios Multiple Calls Performance/Refactoring
我可以在我的 JSON 文件中删除和添加数据,但是如果我一直按下按钮(切换 add/delete),我会遇到网络故障。我假设我不能像这样发出多个请求?
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'));
}
};
以上是我手柄保存数据的片段。所以每次按下它都会切换保存或取消保存,然后它会在我的 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 的服务器并且您正在写入某个文件以响应请求并且该文件正在被 nodemon 监视,那么您的请求将始终触发服务器重启。由于第一个请求会重新启动服务器,紧随其后的任何请求都将失败,因为您的服务器在重新启动时会关闭。
你需要configure nodemon to ignore the appropriate files or directories。这样,对文件的任何更改都不会导致 nodemon 重新启动您的服务器。
我可以在我的 JSON 文件中删除和添加数据,但是如果我一直按下按钮(切换 add/delete),我会遇到网络故障。我假设我不能像这样发出多个请求?
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'));
}
};
以上是我手柄保存数据的片段。所以每次按下它都会切换保存或取消保存,然后它会在我的 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 的服务器并且您正在写入某个文件以响应请求并且该文件正在被 nodemon 监视,那么您的请求将始终触发服务器重启。由于第一个请求会重新启动服务器,紧随其后的任何请求都将失败,因为您的服务器在重新启动时会关闭。
你需要configure nodemon to ignore the appropriate files or directories。这样,对文件的任何更改都不会导致 nodemon 重新启动您的服务器。