Javascript-使用Promise而不拒绝它会导致内存泄漏吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-使用Promise而不拒绝它会导致内存泄漏吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1574字,纯文字阅读大概需要3分钟。
内容图文
![Javascript-使用Promise而不拒绝它会导致内存泄漏吗?](/upload/InfoBanner/zyjiaocheng/949/58d7f58c2a4a44fc91e7956367f5131c.jpg)
这个问题已经在这里有了答案: > Will not resolving a deferred create memory leaks? 1个
代码如下:
function test(value){
return new Promise(function (fulfill, reject){
try {
fulfill(true);
} catch(e) {
throw e;
}
});
}
我担心的是,当您使用Promise并引发错误而不是reject(e)时,这会导致内存泄漏吗?
因为对我来说,抛出错误而不是拒绝错误不会拒绝或退出promise之外的错误.该错误将在Promise中消失.让我知道你的意见.
解决方法:
抛出错误将自动拒绝Promise.阅读更多关于它here
但是有一些事情需要讨论.看下面的代码.代码抛出错误.错误从promise内部抛出.它将自动拒绝并启动捕获链.
function test(value){
return new Promise(function (fulfill, reject){
throw e;
});
}
test('sample text').then(result=>console.log(result)).catch(result=>console.log(result))
但是如果我在诺言中使用了Web API例如setTimeout()怎么办.看下面的代码:
function test(value){
return new Promise(function (fulfill, reject){
setTimeout(function(){
throw new Error('haha');
},1000)
});
}
test('sample text').then(result=>console.log(result)).catch(result=>console.log(result))
Web API是异步的.每当从promise内部调用Web API时,JavaScript引擎都会将该异步代码带到外部执行.简单来说,Web API或异步代码将在主调用堆栈之外执行.
因此,从setTimeout()引发错误将没有任何对调用方promise的引用,因此无法启动catch块.如果有任何错误,则需要从setTimeout()中拒绝它以启动catch块.
会导致内存泄漏吗?
答:不可以
一旦完成执行,test().then().catch()将被垃圾回收.但是如果您将诺言保存在像var p = test();这样的全局变量中, p.then().catch(),则变量p将保留在内存中,不会被垃圾回收.但这不是内存泄漏.内存泄漏是一个完全不同的方面,不适用于这种情况.
内容总结
以上是互联网集市为您收集整理的Javascript-使用Promise而不拒绝它会导致内存泄漏吗?全部内容,希望文章能够帮你解决Javascript-使用Promise而不拒绝它会导致内存泄漏吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。