我一直在玩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}`);
        }
    })


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

最佳答案

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

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的情况,并从那里返回一个承诺。

10-05 23:13