在catch块内的promise遇到问题

时间:2019-10-23 10:09:49

标签: javascript node.js es6-promise

我一直在使用Node.js,遇到了这个问题,在那儿我不确定如何从嵌套catch块实现promise的then / catch块。这是下面的代码:

    // formulating the response
    const readFile = util.promisify(fs.readFile);

    readFile(filePath).then(content => {
        res.writeHead(200, {'Content-Type' : contentType});
        res.end(content, 'utf-8');
    }).catch(err =>{
        if (err.code == 'ENOENT') {
            // not really sure how to handle the then catch block for this promise..
            readFile(path.join(__dirname, 'public', '404.html')) 


        } else {
            res.writeHead(500);
            res.end(`Server Error: ${err.code}`);
        }
    })

抱歉,这很愚蠢,但是对我这样的初学者来说有任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以将它们都链接在内部,我看不到类似这样的问题:

if (err.code == 'ENOENT') {
        // not really sure how to handle the then catch block for this promise..
        readFile(path.join(__dirname, 'public', '404.html'))
        .then( res => { /* you code */ } )
        .catch( err => { /* your code */ } ); 
    }

您还可以返回该承诺并将其链接到外部,如下所示:

.catch(err =>{
    if (err.code == 'ENOENT') {
        return readFile(path.join(__dirname, 'public', '404.html')); 
    } else {
        res.writeHead(500);
        res.end(`Server Error: ${err.code}`);
    }
}).then( res => { /* you code */ }
.catch( err => { /* your code */ } );

但是您将不得不处理不会进入if的情况,并从那里返回一个诺言。