hand
_1_11_146
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 20:07:50
在现代 JavaScript 开发中,异步编程是非常重要的一部分。async/await
是 ES2017 引入的语法糖,它建立在 Promise 的基础之上,为异步代码提供了一种更简洁、更直观的编写方式。本文将详细介绍 async
函数的定义和返回值。
async
函数的定义async
函数是一种特殊的函数,在函数声明或函数表达式前加上 async
关键字来定义。下面是几种不同的定义方式:
async function fetchData() {
// 异步操作代码
return 'Data fetched';
}
const fetchData = async function() {
// 异步操作代码
return 'Data fetched';
};
const fetchData = async () => {
// 异步操作代码
return 'Data fetched';
};
class DataFetcher {
async fetchData() {
// 异步操作代码
return 'Data fetched';
}
}
const fetcher = new DataFetcher();
async
函数的返回值async
函数总是返回一个 Promise 对象。无论函数内部是否显式地返回一个 Promise,async
函数都会将返回值包装在一个 Promise 中。具体情况如下:
如果 async
函数返回一个普通值,这个值会被自动包装在一个已解决(resolved)的 Promise 中。
async function returnNormalValue() {
return 'Hello, async!';
}
returnNormalValue().then(result => {
console.log(result); // 输出: Hello, async!
});
如果 async
函数返回一个 Promise,那么它就直接返回这个 Promise。
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Data from Promise');
}, 1000);
});
}
async function returnPromise() {
return getData();
}
returnPromise().then(result => {
console.log(result); // 输出: Data from Promise
});
如果 async
函数内部抛出错误,这个错误会被包装在一个已拒绝(rejected)的 Promise 中。
async function throwError() {
throw new Error('Something went wrong');
}
throwError().catch(error => {
console.error(error.message); // 输出: Something went wrong
});
async
函数与 await
的结合使用await
关键字只能在 async
函数内部使用,它可以暂停 async
函数的执行,直到 Promise 被解决(resolved)或拒绝(rejected)。
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function example() {
console.log('Start');
await delay(2000);
console.log('After 2 seconds');
return 'Done';
}
example().then(result => {
console.log(result); // 输出: Done
});
情况 | 返回值 | 说明 |
---|---|---|
返回普通值 | 已解决的 Promise | 普通值会被自动包装在一个已解决的 Promise 中 |
返回 Promise | 原 Promise | 直接返回该 Promise |
抛出错误 | 已拒绝的 Promise | 错误会被包装在一个已拒绝的 Promise 中 |
async
函数通过返回 Promise 对象,为异步编程提供了一种更简洁、更直观的方式。结合 await
关键字,可以让异步代码看起来更像同步代码,提高代码的可读性和可维护性。在实际开发中,合理使用 async/await
可以让我们更轻松地处理异步操作。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~