前端 JavaScript 进阶面试题, setTimeout,Promise,AsyncAwait 有什么区别?
前端 JavaScript 进阶面试题, setTimeout,Promise,AsyncAwait 有什么区别?
QA
Step 1
Q:: setTimeout、Promise、Async/
Await 有什么区别?
A:: setTimeout 是一个用于设置定时任务的函数,接受一个回调函数和时间(以毫秒为单位)作为参数。在时间到达后,回调函数会被加入到事件队列中执行。Promise 是一种用于处理异步操作的对象,代表一个在未来某个时间点可能会被执行的操作。它有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Async/
Await 是基于 Promise 的语法糖,使得异步代码看起来像同步代码。async 函数返回一个 Promise,await 用于等待 Promise 解决。
Step 2
Q:: 如何取消一个 setTimeout 计时器?
A:: 可以使用 clearTimeout 函数取消一个 setTimeout 计时器。调用 setTimeout 时会返回一个计时器 ID,传递这个 ID 给 clearTimeout 即可取消计时器。例如:const timerId = setTimeout(callback, 1000); clearTimeout(timerId);
Step 3
Q:: Promise 的状态一旦改变,还可以再变吗?
A:: 不能。Promise 的状态一旦从 pending 变为 fulfilled 或 rejected,就无法再变回 pending 或改变为其他状态。Promise 的状态是不可变的。
Step 4
Q:: async 函数中可以使用哪些关键字来处理异步操作?
A:: async 函数中可以使用 await 关键字来处理异步操作。await 关键字会暂停 async 函数的执行,等待 Promise 解决后继续执行。
Step 5
Q:: Async/
Await 比 Promise 更方便的地方在哪里?
A:: Async/
Await 使得异步代码看起来更像同步代码,读写更加直观,减少了嵌套层级(即回调地狱)。这提高了代码的可读性和可维护性。