欢迎来到程序员中文网!

首页 Linux Mysql C++ Python PHP JavaScript 资源下载 动态 开源推荐
我要投稿 投诉建议

JavaScript 异步编程:回调、Promise 与 async/await

时间:2026年08月12日 04:50:02 浏览:1

回调地狱


fs.readFile('a.txt', (err, data1) => {
fs.readFile('b.txt', (err, data2) => {
fs.readFile('c.txt', (err, data3) => {
// 多层嵌套,难以维护
});
});
});

Promise 链式调用


function readFilePromise(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', (err, data) => {
if (err) reject(err);
else resolve(data);
});
});
}

readFilePromise('a.txt')
.then(data => readFilePromise('b.txt'))
.then(data => readFilePromise('c.txt'))
.catch(err => console.error(err));

async/await(终极方案)


async function readAll() {
try {
const data1 = await readFilePromise('a.txt');
const data2 = await readFilePromise('b.txt');
const data3 = await readFilePromise('c.txt');
return [data1, data2, data3];
} catch (err) {
console.error('读取失败:', err);
}
}

并发执行


const [result1, result2] = await Promise.all([
fetch(url1),
fetch(url2)
]);

现代 JavaScript 异步编程首选 async/await,代码如同同步般清晰。