[英]Catch is not handling rejection of promise
所以,我的問題如下。 我正在返回一個 promise,它在存儲一些數據時沒有問題時解決,但是如果(1.)我要保存文件的目錄不存在或(2.)在該文件夾中已經存在一個文件用那個名字; promise 拒絕特定錯誤。
Router.post('/save/:userid?/:name?/:type?/:payload?', ( request, response ) => {
let promise = new Promise( async ( resolve, reject ) => {
let params = { ...request.params, ...request.query, ...request.body };
let path = `./GameContent/Data/${ params.userid }`;
let fileStream = new FileStream();
let exists = await fileStream.directoryExists( path );
if ( exists ) {
let fileDirectory = `${ path }/${ params.name }.json`;
exists = await fileStream.directoryExists( fileDirectory );
if ( !exists ) {
let bytesWritten = await fileStream.writeFileAt ( fileDirectory, params.payload );
let result = { name: params.name, bytes: bytesWritten, error: 0 };
resolve( JSON.stringify( result ) );
}
else {
let result = { error: 102 };
reject( JSON.stringify( result ) );
}
}
else {
let result = { error: 101 };
reject( JSON.stringify( result ) );
}
});
response.send( promise );
});
到目前為止一切順利,但是,問題在於以下代碼沒有處理拒絕。
$.post('/api/save', levelJSON)
.catch ( err => {
//Do something...
});
我目前收到了我預期的錯誤(錯誤:102)。 但是,我無法處理該錯誤。
調試器拋出這個: UnhandledPromiseRejectionWarning: {"error":102} UnhandledPromiseRejectionWarning: Unhandled promise 拒絕。
jQuery $.post
沒有用於錯誤捕獲的.catch()
方法。 您可以嘗試.fail()
方法,例如:
$.post('/api/save', levelJSON)
.done(function (response) {
// success logic here
})
.fail(function (jqXHR, exception) {
// Error logic here
var msg = '';
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
console.log(msg)
});
您可以更新路由器代碼以捕獲錯誤,例如:
Router.post('/save/:userid?/:name?/:type?/:payload?', (request, response, next) => {
let promise = new Promise(async (resolve, reject) => {
// Your current code here...
});
promise
.then(function(result) {
response.send(result);
})
.catch(next);
});
並將錯誤處理中間件添加到您的快速應用程序中,例如:
app.use(function(err,req,res,next) {
console.log(err.stack);
res.status(500).send({"Error" : err.stack});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.