首页 > 其他分享 >8.实现一个sleep函数

8.实现一个sleep函数

时间:2023-03-05 09:55:22浏览次数:31  
标签:function resolve console 函数 实现 await sleep async

实现一个sleep函数

①利用堵塞循环实现,因为js是单线程的,所以这个其实就是根本上的sleep

function sleep(delay) {
  var start = (new Date()).getTime();
  while ((new Date()).getTime() - start < delay) {
    continue;
  }
}

function test() {
  console.log('111');
  sleep(2000);
  console.log('222');
}

test()

②定时器实现

function sleep1(ms, callback) {
                setTimeout(callback, ms)
            }
            //sleep 1s
            sleep1(1000, () => {
                console.log(1000)
            })

③es6异步处理

const sleep = time => {
 return new Promise(resolve => setTimeout(resolve,time)
 ) } 
 sleep(1000).then(()=>{ console.log(1) })

④yield后面是一个生成器 generator

function sleepGenerator(time) {
    yield new Promise(function(resolve,reject){
        setTimeout(resolve,time);
     }) 
} 
sleepGenerator(1000).next().value.then(()=>{console.log(1)}) 

⑤es7---- async/await是基于Promise的,是进一步的一种优化

function sleep(time) {
    return new Promise(resolve =>
      setTimeout(resolve,time)
 ) } async function output() {
    let out = await sleep(1000); 
    console.log(1); 
    return out;
} 
output();

注意点:

async用来申明里面包裹的内容可以进行同步的方式执行,await则是进行执行顺序控制,每次执行一个await,程序都会暂停等待await返回值,然后再执行之后的await。
await后面调用的函数需要返回一个promise,另外这个函数是一个普通的函数即可,而不是generator。
await只能用在async函数之中,用在普通函数中会报错。
await命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try…catch 代码块中。
其实,async / await的用法和co差不多,await和yield都是表示暂停,外面包裹一层async 或者 co来表示里面的代码可以采用同步的方式进行处理。不过async / await里面的await后面跟着的函数不需要额外处理,co是需要将它写成一个generator的。

 

标签:function,resolve,console,函数,实现,await,sleep,async
From: https://www.cnblogs.com/alwaysrun/p/17179848.html

相关文章

  • 6.手写函数柯里化工具函数、并理解其应用场景和优势
    手写函数柯里化工具函数、并理解其应用场景和优势什么是柯里化(Curring)???什么意思?简单来说,柯里化是一项技术,它用来改造多参数的函数。  简单讲就是把一个多参数的函......
  • STATA:字符串处理函数收集
    //*命令subinstr(S1,S2,S3,n),n表示迭代的次数,S1是变量,S2是需要替代的变量,S3是新替换的变量。如果n是.代表所有的都换*///reverse()字符串逆顺localwjm="`c(current_t......
  • 5.多种方式实现深拷贝、对比优缺点
    前情提要深拷贝:拷贝的是对象或者数组内部数据的实体,重新开辟了内存空间存储数据;浅拷贝:拷贝的是引用类型的指针,副本和原数组或对象指向同一个内存;①递归方式比较全面的深......
  • Python利用模糊哈希实现对比文件相似度详解
    导读对比两个文件相似度,python中可通过difflib.SequenceMatcher/ssdeep/python_mmdt/tlsh实现,在大量需要对比,且文件较大时,需要更高的效率,可以考虑模糊哈希,本文就来和大......
  • 4.使用reduce实现map,使用reduce实现filter
    前情提要:map函数接收一个函数作为参数,作为参数的函数接收三个参数值,分别是遍历数组的每一项元素,元素的索引和数组本身。这三个参数刚好和reduce函数接收的第一个函数参数......
  • day3函数
    """函数的概念:S=πr²,当我们知道半径r的值时,就可以通过公式计算出面积,假设我们需要计算3个不同大小的圆的面积:出现了几乎完全重复的代码,每次计算圆的面积的......
  • SQL中只要用到聚合函数就一定要用到group by 吗?
    今天记录一个弱智问题,一直没发现这个问题。答:看情况1、当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行groupby2、当只做聚集函数查询时候,就不需要进行分组了......
  • 微信小程序结合php后台实现登录授权机制详解
    微信小程序应用的用户登录授权机制相当复杂,官方给出了下面一张流程图来解释:下面结合这张图来详细讲述下小程序的登录验证授权机制。首先,小程序应用实现登录验证的前提是......
  • 数论学习笔记2:数论函数
    积性函数定义积性函数是满足\(\forallu\perpv,f(uv)=f(u)f(v)\)的数论函数,\(f(1)\)总是等于\(1\)。求值由定义可知,积性函数在全体正整数处的取值由其在\(p^k\)......
  • SQL99语法实现多表查询
    3.SQL99语法实现多表查询3.1内连接(INNERJOIN)的实现语法SELECT字段列表FROMA表INNERJOINB表ON关联条件WHERE等其他子句;例SELECTe.employee_id,e.last......