我一直在使用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}`);
}
})
抱歉,这很愚蠢,但是对我这样的初学者来说有任何帮助。
答案 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
的情况,并从那里返回一个诺言。