异步
在JavaScript中,异步编程是一种允许代码无序执行的编程模式。这意味着在等待某些操作完成时,可以执行其他操作,而不需阻塞整个程序的执行。该模非常适合处理比较耗时的任务,比如从服务器获取数据,或者读取文件。
JavaScript中的异步编程通常通过回调(callbacks)、Promise
,以及最近流行的 async/await
等机制来实现。
Promises
Promise
对象表示异步操作的最终完成(或失败)及其结果值。
一个 Promise
可以处于以下其中一个状态:
- pending:初始状态,既没有完成也没有拒绝。
- fulfilled:意味着操作已成功完成。
- rejected:意味着操作失败。
// 返回一个Promise的函数
function fetchData() {
return new Promise((resolve, reject) => {
// 模拟异步操作,比如从API获取数据
setTimeout(() => {
const data = Math.random();
// 模拟成功
if (data > 0.5) {
resolve(data);
} else {
// 模拟失败
reject("Error: Data is too low");
}
}, 500);
});
}
// 使用Promise
fetchData()
.then((result) => {
console.log("Data fetched successfully:", result);
})
.catch((error) => {
console.error("Failed to fetch data:", error);
});
Async / Await
async function
声明将一个异步函数绑定到给定名称。await
关键字只允许在函数体内部使用。它们使得以更干净的方式编写基于 Promise 的异步行为成为可能,避免显式配置 Promise 链的不便。
async function fetchDataAsync() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = Math.random();
if (data > 0.5) {
resolve(data);
} else {
reject("Error: Data is too low");
}
}, 1000);
});
}
// 使用 async/await
async function fetchDataUsingAsyncAwait() {
try {
const result = await fetchDataAsync();
console.log("Data fetched successfully:", result);
} catch (error) {
console.error("Failed to fetch data:", error);
}
}
// 调用异步函数
fetchDataUsingAsyncAwait();
如你所见,await
关键字等待 fetchDataAsync 返回的 Promise 并将其解决。这使得整体代码看起来像同步代码一样易理解。
代码挑战
创建一个名为
getUserInfo
的函数,获取用户信息并显示出来。信息包括用户的姓名和关注者数量。注意:可查看
Promise.all()
用法介绍。
Loading...
> 此处输出代码运行结果