Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Catch不是处理拒绝承诺的问题_Javascript_Error Handling_Catch Block - Fatal编程技术网

Javascript Catch不是处理拒绝承诺的问题

Javascript Catch不是处理拒绝承诺的问题,javascript,error-handling,catch-block,Javascript,Error Handling,Catch Block,因此,我的问题如下。我将返回一个承诺,该承诺在存储某些数据时不会出现问题,但如果(1.)我要保存文件的目录不存在,或者(2.)该文件夹中已存在具有该名称的文件,则会得到解决;承诺拒绝了一个特定的错误 Router.post('/save/:userid?/:name?/:type?/:payload?', ( request, response ) => { let promise = new Promise( async ( resolve, reject ) => {

因此,我的问题如下。我将返回一个承诺,该承诺在存储某些数据时不会出现问题,但如果(1.)我要保存文件的目录不存在,或者(2.)该文件夹中已存在具有该名称的文件,则会得到解决;承诺拒绝了一个特定的错误

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)。但是,我无法处理这个错误

debbuger正在抛出以下内容: 未处理的PromisejectionWarning:{“错误”:102} 未处理的PromisejectionWarning:未处理的承诺拒绝。

jQuery没有用于错误捕获的
.catch()
方法。您可以尝试以下方法:

$.post('/api/save', levelJSON)
        .catch ( err =>  {
            //Do something...
        });
$.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);
});
并将添加到您的express应用程序中,如:

app.use(function(err,req,res,next) {
  console.log(err.stack);
  res.status(500).send({"Error" : err.stack});
});

$.post
这是一个jquery ajax post方法还是一些内部代码?是的,是一个jquery ajax post方法。让jqxhr=$.post('/api/save',levelJSON)。完成(函数(响应){})。失败(函数(jqxhr,异常){}); 我仍然得到这个代码的错误,知道吗?我已经添加了一些修改。看看这是否有用!是的,谢谢你!是一个更好的办法来处理路由器内的错误,现在正在工作。