如果一个promise对象一直不被resolve或reject,在其then上注册回调就一直不会被调用,该回调产生的闭包是否会一直留在内存中,不会被回收,从而导致内存泄漏?
使用场景如下:
// request.js
// 请重点关注axios请求出错的拦截器
import axios from 'axios'
const request = axios.create()
request.interceptors.response
.use(
response => response.data,
error => {
if (error.response.status === 401) {
// 该promise对象一直处于pending
window.alert('登录信息失效!')
return new Promise(() => {})
}
}
)
export default request
// Userinfo.vue
<script>
import request from '../request.js'
export default {
data() {
return {
loading: false,
users: []
}
},
methods: {
getUserList(id) {
this.loading = true
return request.get('/users')
.then(res => {
this.loading = false
this.users = res
})
.catch(e => {
this.loading = false
this.$notify.error(e.message)
})
}
}
}
</script>
说明:拦截器拦截到401的错误后,返回了一个promise对象,该promise实例化时传入的回调既不会调用reject,也不会调用resolve,是永远处于pending状态的。
之所以不resolve或reject是不想走axios调用者的catch,防止重复多余的提示(拦截器里一次,catch里一次)。
请问这样的写法,then和catch由于有vue实例的闭包引用,在页面被销毁之后,vue实例会被回收吗?
https://www.zhihu.com/questio...