JS异步
JS异步
并发&并行
并发是宏观概念,我分别有任务 A 和任务 B,在一段时间内通过任务间的切换完成了这两个任务,这种情况就可以称之为并发。
并行是微观概念,假设 CPU 中存在两个核心,那么我就可以同时完成任务 A、B。同时完成多个任务的情况就可以称之为并行
Promise
Promise是在ES6中确定的对异步及回调处理的规范实现
一个 Promise 必然处于以下几种状态之一:
- 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
使用Promise封装ajax
关键:return new Promise((resolve, reject)=>{...})
用以返回一个Promise对象。
ajax = (method, url) => { |
一个Promise对象具有then函数,then函数接受两个函数,第一个函数当 Promise 变成接受状态(fulfilled)时被调用,第二个函数当 Promise 变成拒绝状态(rejected)时被调用。
catch 接收一个函数,在Promise被reject的时候执行,除非该函数抛出错误或返回一个失败的Promise,否则返回的Promise一直是resolved。实质上catch(failureCallback) 是 then(null, failureCallback) 的缩略形式。
finally接收一个回调函数,在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定该回调函数。这避免了同样的语句需要在then()和catch()中各写一次的情况。
ajax('GET','/user') |
async和await
async和await都是JavaScript中用于处理异步操作的关键字。
async关键字用于声明一个函数是异步函数。异步函数在执行过程中可以暂停,并且可以在某些操作完成之后恢复执行。它们返回一个Promise对象,可以通过await关键字来等待该Promise对象的解决(即完成)。
而await关键字只能在异步函数内部使用。它可以放在一个返回Promise对象的表达式前面,暂停异步函数的执行,直到该Promise对象解决为止。在等待期间,JavaScript引擎可以继续执行其他任务,以避免阻塞线程。一旦Promise对象解决,await表达式会返回解决的值,并且异步函数会继续执行。
以下是async和await的简单用法:
async function fetchData() { try { const response = await fetch(‘https://api.example.com/data‘); const data = await response.json(); console.log(data); } catch (error) { console.log(‘Error:’, error); }}fetchData();