js中await的详细用法
嘻嘻发布于2023-10-31
最后更新于2023年10月31日
浏览await是JavaScript中用于处理异步操作的一个关键字。它只能在async函数中使用,用于暂停当前的async函数执行,并等待Promise的解决或拒绝。一旦Promise解决,await表达式的值将是Promise解决的值。如果Promise被拒绝,await表达式将抛出拒绝的原因。
基本用法
async function simpleExample() {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise resolved");
}, 2000);
});
const result = await promise; // 这里会暂停函数执行,等待Promise解决
console.log(result); // 输出 "Promise resolved"
}
simpleExample();
错误处理
使用try/catch
块捕获await
表达式中的错误。
async function errorHandlingExample() {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject("Promise rejected");
}, 2000);
});
try {
const result = await promise;
console.log(result);
} catch (error) {
console.error(error); // 输出 "Promise rejected"
}
}
errorHandlingExample();
在循环中使用await
在循环中使用await
可以按顺序等待每个Promise
。
async function loopExample() {
const promises = [1, 2, 3].map(num =>
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(num);
}, 1000 * num);
})
);
for (const promise of promises) {
const result = await promise;
console.log(result); // 按1, 2, 3的顺序输出
}
}
loopExample();
在非async函数中使用await
在非async
函数中,不能直接使用await
,但可以使用then
链来处理Promise
。
function nonAsyncExample() {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise resolved");
}, 2000);
});
promise.then(result => {
console.log(result); // 输出 "Promise resolved"
});
}
nonAsyncExample();
并行执行Promise
如果你有多个独立的Promise
需要等待,可以使用Promise.all
来并行执行它们。
async function parallelExample() {
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise 1 resolved");
}, 2000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Promise 2 resolved");
}, 3000);
});
const [result1, result2] = await Promise.all([promise1, promise2]);
console.log(result1); // 输出 "Promise 1 resolved"
console.log(result2); // 输出 "Promise 2 resolved"
}
parallelExample();
await
关键字是处理Promise
的一种强大工具,它可以使异步代码看起来像同步代码。但是,我们需要注意它只能在async
函数中使用,并且需要正确地处理可能的错误。