async/await
async/await
是 ECMAScript 2017 引入的新特性,用于解决 JavaScript 中回调地狱的问题,使异步操作更加简洁和易读。
async
关键字用于声明一个返回 Promise
对象的异步函数,可以在函数内使用 await
等待其他异步操作完成,例如:
async function getUser(id) {
const response = await fetch(`/users/${id}`);
const user = await response.json();
return user;
}
上面的代码中,getUser
函数是一个异步函数,它等待 fetch
和 response.json()
这两个异步操作完成后才会返回结果。
await
关键字用于等待一个返回 Promise
的异步操作完成,并返回其结果,例如:
async function getData() {
const response = await fetch('/data');
const data = await response.json();
return data;
}
上面的代码中,await
等待 fetch
和 response.json()
这两个异步操作完成,并返回 Promise
对象的结果。
需要注意的是,await
只能在异步函数中使用,如果在同步函数中使用,会导致语法错误。同时,使用 await
等待的异步操作必须返回一个 Promise
对象,否则会导致运行时错误。
使用 async/await
可以使异步代码更加简洁和易读,避免回调地狱的问题,提高代码的可维护性和可读性。
Promise
Promise
是 JavaScript 中处理异步操作的一种方式,它可以让异步代码更加优雅和易于维护。在 ES6 中,Promise
被正式引入标准库中,现在已经成为了一种广泛使用的异步编程模式。
Promise
对象代表一个异步操作的最终完成或失败,并返回一个结果或错误信息。它有三种状态:等待态(pending)、完成态(fulfilled)和拒绝态(rejected)。一旦 Promise
对象的状态从等待态变为完成态或拒绝态,它就不会再次改变。
Promise
对象有两个重要的方法:then
和 catch
。then
方法用于注册完成态回调函数,catch
方法用于注册拒绝态回调函数。例如:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const isSuccess = Math.random() < 0.5;
if (isSuccess) {
resolve('Hello, world!');
} else {
reject(new Error('Request failed'));
}
}, 1000);
});
promise.then((result) => {
console.log(result);
}).catch((error) => {
console.error(error);
});
上面的代码中,promise
是一个异步操作,它在一秒钟后随机返回成功或失败。then
方法和 catch
方法分别注册完成态回调函数和拒绝态回调函数,当异步操作完成或失败时,它们分别被调用。
除了 then
和 catch
方法,Promise
对象还有其他一些方法,例如 finally
方法用于注册无论完成态或拒绝态都会被调用的回调函数,all
方法用于并行执行多个异步操作并在所有操作完成后返回结果,race
方法用于并行执行多个异步操作并在任意一个操作完成后返回结果等。
使用 Promise
可以让异步代码更加优雅和易于维护,避免回调地狱的问题,提高代码的可读性和可维护性。
引用自chatGPT
Comments NOTHING