Skip to content

Latest commit

 

History

History
39 lines (32 loc) · 1.35 KB

24.3.md

File metadata and controls

39 lines (32 loc) · 1.35 KB

24.3 第一个例子

让我们看下第一个例子,初步了解使用 Promise 会是怎么样的。

在 Node.js 风格的回到中,异步地读取一个文件的内容看起来像这样:

fs.readFile('config.json',
    function (error, text) {
        if (error) {
            console.error('Error while reading config file');
        } else {
            try {
                let obj = JSON.parse(text);
                console.log(JSON.stringify(obj, null, 4));
            } catch (e) {
                console.error('Invalid JSON in file');
            }
        }
    });

使用 Promise ,相同功能的实现像这样:

readFilePromisified('config.json')
.then(function (text) { // (A)
    let obj = JSON.parse(text);
    console.log(JSON.stringify(obj, null, 4));
})
.catch(function (reason) { // (B)
    // File read error or JSON SyntaxError
    console.error('An error occurred', reason);
});

仍然有回调,但是这些回调通过函数返回结果( Promise )上的方法( then()catch() )来提供。行 B 的错误回调在两个方面是比较方便的:首先,仅用于处理错误(对比一下之前例子中的 if(error)try-catch );其次,可以在某一个地方处理 readFilePromisified() 和行 A 处的回调产生的错误。

readFilePromisified() 的代码在后面展示。