当前位置:网站首页>es6的async函数
es6的async函数
2022-08-09 11:09:00 【一头小驴】
如下例子,可以初步帮我们理解javascript的线程机制。我们都知道javascript是单线程,那么它是怎么实现异步的呢?
然后async在google上已经支持,据说用babel转为es5可能更兼容。
//一个让当前线程休眠一段时间的方法
function sleep(interval) {
return new Promise(resolve => {
setTimeout(resolve, interval);
})
}
//异步函数
async function one2FiveInAsync(name) {
for(let i = 1; i <= 5; i++) {
console.log(i+name);
//每一次循环打印之后,让当前的处理休眠一段时间(可以理解为进入异步处理)并继续后续同步代码的执行
// 等到下一轮如果休眠完成,再继续
await sleep(1000);
}
}
one2FiveInAsync("第一次");
one2FiveInAsync("第二次");
for(let i = 0;i<=10;i++){
console.log("同步"+i)
}
//从执行结果我们可以看出,javascript对于线程是一轮一轮的去访问遍历的,
//而不是某个异步完成后回调函数立即执行的,而是等到下一波轮询的时候执行
// 1第一次
// 1第二次
// 同步1
// 同步2
// 同步3
// 同步4
// 同步5
// 同步6
// 同步7
// 同步8
// 同步9
// 同步10
// 2第一次
// 2第二次
// 3第一次
// 3第二次
// 4第一次
// 4第二次
// 5第一次
// 5第二次
class Sleep {
constructor(timeout) {
this.timeout = timeout;
}
then(resolve, reject) {
const startTime = Date.now();
setTimeout(
() => resolve(Date.now() - startTime),
this.timeout
);
}
}
function sleep(interval) {
return new Promise(resolve => {
setTimeout(resolve, interval);
})
}
(async () => {
const sleepTime = await new Sleep(5000); //注意这里加await和不加await的区别 注意整个异步函数内部,使用await之后,它会等待计算出来结果之后,再获得执行权,继续往下跑。
console.log("线程休眠时间"+sleepTime);
console.log("同步代码执行标记2");
})();
console.log("异步函数体外----同步代码执行标记2");
//从执行
//异步函数体外----同步代码执行标记2
// 线程休眠时间5002
// 同步代码执行标记2
边栏推荐
猜你喜欢
随机推荐
PTA 矩阵运算
STemwin中GUI_Exec和GUI_Delay
Antdv+Asp.net WebApi开发学生信息管理系统(一)
二叉树 前序是根在前(根左右)中序(左根右)
富媒体在客服IM消息通信中的秒发实践
CentOS6.5 32bit安装Oracle、ArcSde、Apache等配置说明
激光条纹中心提取——Steger
PTA 找出不是两个数组共有的元素
grpc系列-初探grpc 路由注册和转发实现
golang源代码阅读,sync系列-Pool
信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束
activemq message persistence
CentOS6.5 32bit安装Oracle-11gR2步骤说明
threejs+shader 曲线点运动,飞线运动
图片查看器viewer
【C language】动态数组的创建和使用
去除蜂窝状的噪声(matlab实现)
Error: Cannot find module ‘./application‘
matlab图像分割,从基因芯片荧光图像中提取阴性点(弱)和阳性点(强)
FreeRTOS列表和列表项源码分析









