我有一个用ExpressJS编写的API。现在,我正在使用WebSocket服务器从该API提取数据,但是当我进行一些获取(POST,PUT或DELETE)更新数据库(Postgres)然后进行GET请求时,却遇到了问题。
我期望GET取回所有记录的列表,包括我刚刚更新的记录,但是不包括新记录。
然后,我在更新操作和新GET之间加入了超时。我知道这不是一个好的解决方案,因为当许多用户同时发送请求时,我定义的超时可能无法正常工作。
client.on('deleteData', (id) => {
fetch(server+id, {
method: 'DELETE',
})
.then (
setTimeout(function(){
fetch(server)
.then(response => response.json())
.then(//params separated with ,
responseJson => {
client.emit('getData', responseJson.data)
client.broadcast.emit('getData', responseJson.data) /
console.log(responseJson.data)
console.log("eliminated!")
}) }, 1000))
.catch((error) =>{
console.error(error)
client.emit('getData', error)
})})
如果我从代码中取出超时,则新的更新(在本例中为DELETE)不会反映在下一个GET中获得的数据集中。
有人可以帮助我找到一种方法来等待确切的时间,以便更新的数据可用于下一个GET吗?
答案 0 :(得分:0)
我找到了解决方案,GET请求应该在POST回调中:
client.on('eliminarCliente', (id) => {
fetch(server+id, {
method: 'DELETE',
})
.then (response => response.json())
.then (responseJson => {
fetch(server)
.then(response => response.json())
.then(responseJson => {
client.emit('getData', responseJson.data)
client.broadcast.emit('getData', responseJson.data)
})
.catch((error) =>{
client.emit('getData', error)
})
})
.catch((error) =>{
client.emit('getData', error)
})
})