gpt4 book ai didi

javascript - catch 没有处理 promise 的拒绝

转载 作者:行者123 更新时间:2023-12-03 07:40:43 24 4
gpt4 key购买 nike

因此,我的问题如下。我返回一个 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:{“错误”:102}
UnhandledPromiseRejectionWarning:未处理的 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);
});

并将 error handling middleware添加到您的快速应用中,例如:
app.use(function(err,req,res,next) {
console.log(err.stack);
res.status(500).send({"Error" : err.stack});
});

关于javascript - catch 没有处理 promise 的拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61167575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com