- 单线程模型的含义
- 消息队列
- event loop
- 定时器
- setTimeout();
- setInterval();
- 正常任务与微任务
- javascript异步执行
- promise对象
答案:
- 单线程模型指的是javascript只在一个线程上运行,javascript同时只能执行一个任务,其他任务必须排在后面等待执行.
事实上javascipt只在一个线程上运行,不代表javascript引擎只有一个线程.javascript引擎有多个线程,单个脚本只能在一个线程上运行,其他线程都是在后台配合. - javascript运行时,除了一根运行线程,引擎还提供了一个消息队列(message queue),里面是各种需要当前程序处理的消息,新的消息进入队列的时候,会排在队列的尾端.
运行线程只要发现消息队列不为空,就会取出在第一位的消息,执行对应的回调函数,进入消息队列的消息,必须有回调函数,否则这个消息就会遗失. - 所谓event loop机制,指的是一种内部循环,用来一轮又一轮的处理消息队列中的消息,即执行对应的回调函数.
- javascript提供定时执行代码的功能,叫做定时器,主要由setTimeout()和setInterval()这两个函数来完成.他们向任务队列添加定时任务
- var timeId = setTimeout(func|code,delay);
除了前两个参数,setTimeout还支持添加更多的参数,他们将被传入推迟执行的函数(回调函数). - setIterval()省略...
- 正常人任务task与微任务microtask.他们的区别在于,正常任务下一轮event loop执行,微任务在本轮event loop的所有任务结束后执行.定时器是正常任务,promise是属于微任务
- 回调函数进行异步执行,事件监听,发布/订阅
- promise是commonJS工作组提出的一种规范,目的是为异步操作提供统一接口
比如,异步操作f1返回一个promise对象,他的回调函数f2写法如下:
(new Promise(f1)).then(f2);
promise对象只有三种状态
异步操作未完成pending
异步操作已完成resolved
异步操作失败rejected
这三种状态只有两种变化途径:
从未完成到失败-->rejected
从未完成到成功-->resolved
Promise对象的生成
ES6提供了原生的Promise构造函数,用来生成Promise实例
var promise = new Promise(function(resolve,reject){
// 异步操作的代码
if(成功){
resolve(value);
}else{
reject(error);
}
});
网友评论