JS 异步
// 本代码由 AI 生成
/************************************************
* 模拟一个异步函数,比如:通过网络请求获取数据
* ----------------------------------------------
* - 返回 Promise:在这里,使用 setTimeout
* 来模拟 1 秒后返回结果
* - 如果操作成功,调用 resolve;若失败,则调用 reject
************************************************/
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
// 模拟一个布尔值来决定成功或失败
const success = true;
if (success) {
// 成功时,通过 resolve 返回结果
resolve("数据获取成功 —— 来自 fetchData()");
} else {
// 失败时,通过 reject 抛出错误信息
reject("数据获取失败 —— 来自 fetchData()");
}
}, 1000);
});
}
/************************************************
* 方式一:使用 Promise 的 then / catch
* ----------------------------------------------
* - then(): 用来接收异步操作成功时返回的结果
* - catch(): 用来接收异步操作中的错误信息
************************************************/
fetchData()
.then((data) => {
console.log("[Promise] then:", data);
})
.catch((error) => {
console.error("[Promise] catch:", error);
});
/************************************************
* 方式二:使用 async / await
* ----------------------------------------------
* - async: 用于声明异步函数,该函数返回一个 Promise
* - await: 用于等待一个返回 Promise 的函数执行完毕,并
* 将其返回值赋给一个变量,就像同步代码写法
* - try...catch: 用来捕获异步函数内部可能出现的错误
************************************************/
async function handleData() {
try {
// await 等待 fetchData() 返回并获取其返回值
const result = await fetchData();
console.log("[Async/Await] result:", result);
} catch (error) {
// 如果 fetchData() 内部调用 reject,则会进入到这里
console.error("[Async/Await] error:", error);
}
}
// 调用使用 async/await 写法的函数
handleData();