JavaScript 手写 setTimeout 及 同步调用和异步调用
2024-09-07 19:27:29
demo
let timeout = (sec, num) => {
const now = new Date().getTime() // 获取进入方法时的时间
let flag = true
let count = 0
while (flag) {
count++
const after = new Date().getTime() // 执行到此的时间
const dealy = sec * 1000
if (after - dealy >= now) { // 比较是否已经过了设置的时间
flag = false
}
}
return new Promise((resolve, reject) => {
resolve(num * num)
})
}
// 使用async包装返回Promise的方法
async function tryWithAsync(sec, num) {
const res = await timeout(sec, num)
return res
}
tryWithAsync(3, 10).then(value => console.info(value)) // 100
// 直接调用返回Promise的方法
let result = ''
const res = timeout(1, 20)
console.info(res) // Promise { 400 }
// 返回的是一个promise,promise中resolve中的值需要在then中拿到
res.then(x => { // 微任务先执行
console.info(x) // 400
})
最新文章
- sql 更新列表中最老的一条数据
- 合并文件夹里多个excel
- Python基础5:列表 元祖 字典 集合
- LayoutInflater(二)
- load/get延迟加载和及时加载
- JS中函数的基础知识
- Java + MongoDB Hello World Example--转载
- zoj 2277 The Gate to Freedom
- 相同域名不同端口的两个应用,cookie名字、路径都相同的情况下,会覆盖吗
- ASP.NET Core Middleware 抽丝剥茧
- STL迭代器iterator
- 移动端 上传头像 并裁剪功能(h5)
- 使用Spring的@Scheduled实现定时任务参数详解
- CodeForces - 444C
- [路径规划] VFF和VFH
- WebShell代码分析溯源(第1题)
- Vue---从后台获取数据vue-resource的使用方法
- linux驱动之LCD(无framebuffer)
- <;转>;pandas学习
- HTML5学习笔记 Geolocation(地理定位)