从回调地狱到 async/await,JavaScript 的异步编程经历了翻天覆地的变化。
回调时代
最早的异步写法:
fs.readFile('file.txt', function(err, data) {
if (err) throw err;
parseFile(data, function(err, result) {
if (err) throw err;
saveResult(result, function(err) {
if (err) throw err;
console.log('done');
});
});
});这就是著名的「回调地狱」。
Promise 时代
Promise 让异步代码变得可链式调用:
readFile('file.txt')
.then(data => parseFile(data))
.then(result => saveResult(result))
.then(() => console.log('done'))
.catch(err => console.error(err));async/await 时代
终极解决方案:
async function process() {
try {
const data = await readFile('file.txt');
const result = await parseFile(data);
await saveResult(result);
console.log('done');
} catch (err) {
console.error(err);
}
}异步代码终于写出了同步的感觉。
技术的演进总是让复杂的事情变得简单,感谢那些推动进步的开发者们。