承诺中的内存泄漏
Memory leak in promise
我正在尝试利用 promise
实现一个函数,该函数先等待然后记录一些字符串,想到 setTimeout
时首先想到的是 clearTimeout
,该函数做我想做的事。我的问题是,自从我清除 timeId 以来,创建的初始承诺中是否存在任何内存泄漏,因此它永远不会被解决。
对不起,我的英语不好,代码乱七八糟。
// Goodman
function Goodman(sbd) {
let timeId
let promise = new Promise(resolve => {
timeId = setTimeout(() => resolve(console.log('I am ' + sbd)), 0)
})
let rest = function(ms) {
this.promise.then(() => new Promise(resolve => setTimeout(resolve, ms)))
return this
}
let learn = function(sth) {
this.promise.then(() => console.log('Learning ' + sth))
return this
}
let restFirst = function(ms) {
clearTimeout(this.timeId)
this.promise = new Promise(resolve => {
this.timeId = setTimeout(resolve, ms)
}).then(() => console.log('I am ' + sbd))
return this
}
return {
timeId,
promise,
rest,
learn,
restFirst
}
}
// Initially wait 5 seconds
// "I am Tom"
// "Learning chinese"
Goodman('Tom')
.restFirst(5000)
.learn('chinese')
My question is are there any memory leaks in the initial promise created which is ever pending since I clear the timeId so it's never gonna be settled.
不,从未解决或拒绝的承诺只是 Javascript 中的一个对象,就像任何其他对象一样。当不再有任何代码引用该对象时(当它变为 "unreachable" 时),它将被垃圾收集。
记住,promises 只是一个通知系统。它们只是一个常规 Javascript 对象,用作成功和失败侦听器的信息交换所,以及锁定的成功值或某些事件的失败原因,这些事件将在未来某个时间完成。它们只是一个具有方法的对象,就像任何其他对象一样。当它们变得不可访问时,无论它们是已解决、已拒绝还是仍处于待处理状态,它们都会在那时被垃圾收集。
我正在尝试利用 promise
实现一个函数,该函数先等待然后记录一些字符串,想到 setTimeout
时首先想到的是 clearTimeout
,该函数做我想做的事。我的问题是,自从我清除 timeId 以来,创建的初始承诺中是否存在任何内存泄漏,因此它永远不会被解决。
对不起,我的英语不好,代码乱七八糟。
// Goodman
function Goodman(sbd) {
let timeId
let promise = new Promise(resolve => {
timeId = setTimeout(() => resolve(console.log('I am ' + sbd)), 0)
})
let rest = function(ms) {
this.promise.then(() => new Promise(resolve => setTimeout(resolve, ms)))
return this
}
let learn = function(sth) {
this.promise.then(() => console.log('Learning ' + sth))
return this
}
let restFirst = function(ms) {
clearTimeout(this.timeId)
this.promise = new Promise(resolve => {
this.timeId = setTimeout(resolve, ms)
}).then(() => console.log('I am ' + sbd))
return this
}
return {
timeId,
promise,
rest,
learn,
restFirst
}
}
// Initially wait 5 seconds
// "I am Tom"
// "Learning chinese"
Goodman('Tom')
.restFirst(5000)
.learn('chinese')
My question is are there any memory leaks in the initial promise created which is ever pending since I clear the timeId so it's never gonna be settled.
不,从未解决或拒绝的承诺只是 Javascript 中的一个对象,就像任何其他对象一样。当不再有任何代码引用该对象时(当它变为 "unreachable" 时),它将被垃圾收集。
记住,promises 只是一个通知系统。它们只是一个常规 Javascript 对象,用作成功和失败侦听器的信息交换所,以及锁定的成功值或某些事件的失败原因,这些事件将在未来某个时间完成。它们只是一个具有方法的对象,就像任何其他对象一样。当它们变得不可访问时,无论它们是已解决、已拒绝还是仍处于待处理状态,它们都会在那时被垃圾收集。