首页 > 其他分享 >js 模拟等待(阻塞)

js 模拟等待(阻塞)

时间:2024-04-12 10:56:09浏览次数:22  
标签:resolve 函数 JavaScript 阻塞 js Promise setTimeout 等待 模拟

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
 
// 使用方法
async function run() {
  console.log('开始等待...');
  await sleep(2000); // 等待2000毫秒(2秒)
  console.log('等待结束!');
}
 
run();

在这个例子中,wait函数返回一个 Promise,在指定的毫秒数之后通过调用 resolve来解决这个Promise。run函数是一个异步函数,它使用await关键字来暂停执行,直到等待的 Promise被解决。这样就可以在JavaScript中实现等待功能。


  • 这段代码会内存泄漏吗?

上面wait函数代码本身不会导致内存泄漏。它正确地使用了setTimeout函数和Promise解析机制,没有保留任何不必要的引用或创建未管理的资源。

以下是它不会造成内存泄漏的原因:

  1. setTimeout: setTimeout函数用于安排一个回调函数(在此例中为resolve函数)在指定时间(ms)后执行。当超时时间到达时,JavaScript运行时将执行该回调,并随后释放对其的所有引用,确保关联内存被释放。

  2. Promise解析:setTimeout回调中调用resolve函数后,它将解析由wait函数返回的Promise。JavaScript引擎会跟踪Promise的解析和拒绝状态,但一旦所有已连接的.then.catch.finally回调(如果存在)都已执行完毕,已解析的Promise及其关联数据将在没有其他引用的情况下被垃圾回收。

  3. 无未管理资源: 该代码没有创建任何需要手动清理的未管理资源(如全局变量、事件监听器、数据库连接等)。Promise和setTimeout都是JavaScript内置功能,它们的资源管理由语言运行时自动处理。

标签:resolve,函数,JavaScript,阻塞,js,Promise,setTimeout,等待,模拟
From: https://www.cnblogs.com/anjun-xy/p/18130706

相关文章

  • js设置浏览器全屏,无地址栏
    html:<p><buttonid="view-fullscreen">全屏</button><buttonid="cancel-fullscreen">退出</button></p>js://JavaScriptDocument(function(){varviewFullScreen=document.getEleme......
  • Jmeter模拟用户并发token参数化
    场景:项目需求,模拟用户并发签到,要求签到数据能记录到数据库。分析:签到接口需要tocken,单个tocken只能签到一次,需要多个tocken一起并发。脚本如下:        解决返回的乱码问题。  ......
  • golang JSON序列化和反序列化
    目录JSON序列化(Marshaling)JSON反序列化(Unmarshaling)错误处理和注意事项在Go语言(通常被称为Golang)中,JSON(JavaScriptObjectNotation)是一种常用的数据交换格式。Go标准库提供了encoding/json包,使得JSON的序列化(将Go数据结构转换为JSON格式的字符串)和反序列化(将JSON格式的字符串......
  • 30 天精通 RxJS (14):Observable Operator - throttle, debounce
    昨天讲到了在UI操作上很常用的delay,今天我们接着要来讲另外两个也非常实用operators,尤其在做性能优化时更是不可或缺的好工具!Operatorsdebounce跟buffer、bufferTime一样,Rx有debounce跟debounceTime一个是传入observable另一个则是传入毫秒,比较常用到的是de......
  • json list to excel
    每次从数据库导出数据交付产品的时候常需要把json拍成excel"""json_to_excel.py~~~~~~~json文件转换为excel文件(xlsx)注:最多容纳1048576行数据"""importosimportsysimportjsonimportopenpyxlfromopenpyxl.stylesimportNamedStyle,Font,A......
  • ubuntu系统上安装nodejs
    linux上python运行execjs函数,需要js环境,需要安装nodejs和npm sudoapt-getupdatecurl-sLhttps://deb.nodesource.com/setup_18.x|sudo-Ebashapt-getinstallnodejs-y报错 dpkg-deb:error:pastesubprocesswaskilledbysignal(Brokenpipe)  E:Sub-proces......
  • 格式化HTML代码 ,美化JS代码教程
    直接上地址美化HTMLhttps://htmlformatter.com/美化JShttps://beautifier.io/1.美化HTML使用教程把html代码输入到代码框点击format然后等待格式化然后点击Download下载按钮2.美化JS使用教程把代码输入到代码框点击右边的BeautifyJavascript按钮,选择美化代码的种......
  • 前端纯原生js数据监控,更新视图
    还没完善好,先记录一部分 binding.js//定义Model类,用于存储数据和监听数据变化functionModel(value=""){this._value=value;//存储数据的值this._listeners=[];//存储监听数据变化的函数}//定义Model类的set方法,用于设置数据的值Model.prototype.set......
  • js中密码或邮箱等..加密及解密方法
    在JavaScript中,密码和邮箱信息通常需要在客户端加密后再发送到服务器,保证信息的安全性。以下是一个使用CryptoJS库进行加密和解密的例子:首先,需要引入CryptoJS库:<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>然后,可以使用......
  • 【教程】MuMu模拟器HTTPS抓包实践
    ✨所需工具MuMu模拟器:https://mumu.163.com/Charles:https://www.charlesproxy.com/OpenSSL:https://slproweb.com/products/Win32OpenSSL.html✨签发证书下载安装Charles(需要学习版请点击)Help>SSLProxying>SaveCharlesRootCertificate导出证书,命名为charles.pe......