JavaScript 异步编程演进史

从回调地狱到 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);
    }
}

异步代码终于写出了同步的感觉。

技术的演进总是让复杂的事情变得简单,感谢那些推动进步的开发者们。

添加新评论