mdn官网
Js是单线程的,并不能想向java一样开启多个线程处理任务。
但是Js引入了执行栈
和任务队列
的概念。
同时将要执行的任务分为了同步任务
和异步任务
程序执行同步任务时,会直接放入执行栈中执行,当程序执行到异步任务时,会先将异步任务放入任务队列中。直到执行栈中任务执行完后,再去执行任务队列中的任务。
除了放置异步任务的事件,"任务队列"还可以放置定时事。
setTimeout()接受两个参数,第一个是回调函数,第二个是推迟执行的毫秒数。
需要注意的是,setTimeout()只是将事件插入了"任务队列",必须等到当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码耗时很长,有可能要等很久,所以并没有办法保证,回调函数一定会在setTimeout()指定的时间执行。
综上所属:
setTimeout是单线程,类似异步,但不是异步 。
异步:
异步的三种实现方式:
1) 回调函数 ; 回调函数不一定是异步 , 但异步一定有回调函数
2) 事件
3) promise 承诺对象
-
await 操作符用于等待一个
Promise
对象。它只能在异步函数 async function 中使用。 -
Promise 对象
用于表示一个异步操作的最终完成 (或失败)及其结果值。 -
await 表达式
返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身 -
await 表达式
会暂停当前 async function 的执行,等待 Promise 处理完成。 -
当
new Promise()
中定义的异步任务顺利完成且返回结果值时,会调用 resolve 函数;而当异步任务失败且返回失败原因(通常是一个错误对象)时,会调用reject 函数。 -
async/await 使用了 协程(Generator) 和 微任务(Promise) 两种技术来实现。