JS 异步/等待

1. 异步/等待

Async/Await 是一种使用 Promise 的更简洁的方式。它不会取代承诺——它在内部使用它们。

规则:

1
2
async function → always returns Promise
await → pauses function until promise resolves

示例 1:基本异步

1
2
3
4
5
6
7
8
9
10
11
12
function getData() {
return new Promise(resolve => {
setTimeout(() => resolve("User loaded"), 1000);
});
}

async function main() {
const data = await getData();
console.log(data);
}

main();

示例2:顺序执行

1
2
3
4
5
6
7
8
9
function step1() { return Promise.resolve("Step 1 done"); }
function step2() { return Promise.resolve("Step 2 done"); }

async function run() {
const a = await step1();
const b = await step2();
console.log(a, b);
}
run();

示例 3:错误处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function login(user) {
return new Promise((res, rej) => {
if (!user) rej("No user");
else res("Welcome");
});
}

async function start() {
try {
const msg = await login(null);
console.log(msg);
} catch (err) {
console.log("Error:", err);
}
}
start();

示例 4:并行执行

1
2
3
4
5
6
7
8
9
10
11
12
function getUsers() {
return new Promise(res => setTimeout(()=>res("Users"),1000));
}
function getProducts() {
return new Promise(res => setTimeout(()=>res("Products"),1000));
}

async function load() {
const [u,p] = await Promise.all([getUsers(), getProducts()]);
console.log(u,p);
}
load();

示例 5:异步返回 Promise

1
2
3
4
5
async function test(){
return "Hello";
}

test().then(console.log);