取消向服务器发送删除请求的操作后,应用程序崩溃

Posted

技术标签:

【中文标题】取消向服务器发送删除请求的操作后,应用程序崩溃【英文标题】:After cancelling an action to send a delete request to the server, the app crashes 【发布时间】:2021-07-16 16:51:28 【问题描述】:

我正在使用 axios 发出 HTTP 请求

这是我删除数据库中用户的功能,我使用的是作为依赖项安装的 json-server

    const deleteThisPerson = (id) => 
        // console.log(`$name is being deleted`);
        contactServices
            .remove(id)
            .then(() => 
                const currentContacts = persons.filter(person => person.id !== id)
                setPersons(currentContacts)
            )
            .catch(error => console.log(error))
    

我的 http 删除请求是这样的

const remove = (id) => 
    if (window.confirm(`Delete user?`)) 
        const request = axios.delete(`$baseUrl/$id`)
        return request.then(response => response.data)
     else 
        return false
    


我有一个window.confirm(),当用户尝试从数据库中删除资源时,它会弹出,如果我点击Ok,它会工作,但如果我点击Cancel,它会崩溃,我收到以下错误消息@ 987654326@

我该如何纠正这个问题?

【问题讨论】:

【参考方案1】:

else 分支中,您返回的false 没有then 属性(false.thenundefined)。你可以使用Promise.reject 来返回一个被拒绝的承诺。

const remove = (id) => 
  if (window.confirm('Delete user?')) 
    // ...
   else 
    return Promise.reject(new Error('Request cancelled'))
  

您也可以省略 else 子句,因为您是从 if 分支返回的。

const remove = (id) => 
  if (window.confirm('Delete user?')) 
    // ...
   
  return Promise.reject(new Error('Request cancelled'))

【讨论】:

在我的情况下我会做 request.reject( //...) 吗?或 Promise.reject(//...) @utsavojha95 你应该使用Promise.reject(...)。你不能在request 上调用reject,它是块作用域到if 分支。

以上是关于取消向服务器发送删除请求的操作后,应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

微服务架构之最终一致性设计概述

线程:PyQt 因“出队时队列中的未知请求”而崩溃

向身份服务器发送结束会话请求会引发错误

用文件向服务器发送请求

取消 HttpRequest 后浏览器挂起直到服务器超时

在 iOS 8 中取消注册推送通知