在 Web 开发中,异步编程是非常常见的。在过去,我们使用回调函数来处理异步操作,但是回调函数嵌套过多会导致代码难以维护和理解。ES6 中引入了 Async Promise 技术,可以让异步编程更加简洁和可读性更高。
Promise
Promise 是一种用于异步编程的解决方案,可以避免回调函数嵌套的问题。Promise 有三种状态:pending(等待中)、fulfilled(已成功)和rejected(已失败)。当 Promise 对象的状态变为 fulfilled 或 rejected 时,就会执行 then() 方法中的回调函数。
创建 Promise
我们可以使用 Promise 构造函数来创建一个 Promise 对象:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - -- ---- ------------- -- - -- --- ------ --- - ---------------- - ---- - -------------- - -- ------ ---展开代码
在 Promise 构造函数中,我们需要传入一个函数,这个函数接受两个参数:resolve 和 reject。当异步操作成功时,我们调用 resolve 方法,并将结果传递给它。当异步操作失败时,我们调用 reject 方法,并将错误信息传递给它。
使用 Promise
当我们创建了一个 Promise 对象后,我们可以使用 then() 方法来注册回调函数。then() 方法接受两个参数:onFulfilled 和 onRejected。当 Promise 对象的状态变为 fulfilled 时,就会执行 onFulfilled 回调函数;当 Promise 对象的状态变为 rejected 时,就会执行 onRejected 回调函数。
promise.then( result => { // 处理成功结果 }, error => { // 处理失败结果 } );
我们还可以使用 catch() 方法来处理 Promise 对象的错误:
promise.catch(error => { // 处理错误 });
Async/Await
在 Promise 基础上,ES8 引入了 Async/Await 技术,可以进一步简化异步编程。Async/Await 是一种基于 Promise 的语法糖,可以让异步代码看起来像同步代码。
Async
Async 是一个关键字,用于声明一个异步函数。异步函数会返回一个 Promise 对象。
async function asyncFunc() { // 异步操作 return result; }
Await
Await 关键字可以在异步函数中暂停代码的执行,等待 Promise 对象的状态变为 fulfilled。当 Promise 对象的状态变为 fulfilled 时,Await 关键字会返回 Promise 对象的结果。
async function asyncFunc() { const result = await promise; // 处理结果 }
错误处理
在异步函数中,我们可以使用 try-catch 语句来处理 Promise 对象的错误:
async function asyncFunc() { try { const result = await promise; // 处理成功结果 } catch (error) { // 处理错误 } }
示例代码
下面是一个使用 Async Promise 技术的示例代码,用于获取 GitHub 用户的信息:
-- -------------------- ---- ------- ----- ----------- - ----- -------- -- - --- - ----- -------- - ----- -------------------------------------------------- ----- ---- - ----- ---------------- ------ ----- - ----- ------- - ------------------- - -- -------------------------------- -- - ------------------ ---展开代码
在这个示例代码中,我们使用 fetch() 函数来获取 GitHub 用户的信息。fetch() 函数返回一个 Promise 对象,我们使用 await 关键字来等待 Promise 对象的结果。如果获取用户信息成功,我们返回用户信息的 JSON 数据;如果获取用户信息失败,我们打印错误信息。最后,我们使用 then() 方法来处理异步函数的结果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cd0218e46428fe9e64cc14