js 异步实现
异步实现方法
JavaScript 提供了多种异步编程的实现方式,主要包括回调函数、Promise、async/await 和生成器(Generator)。以下是这些方法的详细说明。
回调函数
回调函数是最基础的异步实现方式,通过将函数作为参数传递给另一个函数,在异步操作完成后执行回调。
function fetchData(callback) {
setTimeout(() => {
callback('Data fetched');
}, 1000);
}
fetchData((data) => {
console.log(data); // 输出: Data fetched
});
Promise
Promise 是 ES6 引入的异步解决方案,提供了更清晰的链式调用方式。
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Data fetched');
}, 1000);
});
}
fetchData()
.then((data) => {
console.log(data); // 输出: Data fetched
})
.catch((error) => {
console.error(error);
});
async/await
async/await 是 ES7 引入的语法糖,基于 Promise,使异步代码看起来像同步代码。
async function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data fetched');
}, 1000);
});
}
async function main() {
try {
const data = await fetchData();
console.log(data); // 输出: Data fetched
} catch (error) {
console.error(error);
}
}
main();
生成器(Generator)
生成器通过 yield 关键字暂停和恢复函数执行,结合 Promise 可以实现异步操作。

function* fetchData() {
yield new Promise((resolve) => {
setTimeout(() => {
resolve('Data fetched');
}, 1000);
});
}
const generator = fetchData();
generator.next().value.then((data) => {
console.log(data); // 输出: Data fetched
});
选择建议
- 回调函数:适合简单的异步操作,但容易导致回调地狱。
- Promise:适合链式异步操作,代码更清晰。
- async/await:适合需要同步写法的复杂异步逻辑。
- 生成器:适合需要精细控制执行流程的场景。
根据具体需求选择合适的异步实现方式。






