当前位置:网站首页>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
边栏推荐
猜你喜欢
Multi-merchant mall system function disassembly 26 lectures - platform-side distribution settings
MySQL传统方案和通过SSH连接哪个好?
PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization Paper Reading
七夕?程序员不存在的~
【精华文】C语言结构体特殊情况分析:结构体指针 / 基本数据类型指针,指向其他结构体
信息系统项目的十大管理
golang 标准库json Marshal、Unmarshal坑
electron 应用开发优秀实践
数论知识点
Preparation for gold three silver four: how to successfully get an Ali offer (experience + interview questions + how to prepare)
随机推荐
margin出bug---margin失效
双向链表的各种操作
MDK添加注释模板
Qt 国际化翻译
STemwin中GUI_Exec和GUI_Delay
CAN总线发送数据
electron 应用开发优秀实践
caffe ---make all editing error
STM32启动方式及BootLoader
sublime记录
golang runtime Caller、Callers、CallersFrames、FuncForPC、Stack作用
ICML 2022 | Out-of-Distribution Detection with Deep Nearest Neighbors
1008 Elevator (20分)
无刷无霍尔BLCD电机控制
最长回文子串
使用.NET简单实现一个Redis的高性能克隆版(四、五)
bit、byte、KB、M、G、T相互关系
去除蜂窝状的噪声(matlab实现)
STM32使用静态队列保存数据
C语言统计不同单词数