首页 > 解决方案 > Node-Soap - 在异步方法中抛出错误

问题描述

使用 node-soap 库创建了一个肥皂 api,但是当我尝试使用

throw {
    Fault: {
      Code: {
        Value: 'soap:Sender',
        Subcode: { value: 'rpc:BadArguments' }
      },
      Reason: { Text: 'Processing Error' }
    }
  };

正如图书馆所述,我得到了一个

UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)

这就是我目前正在做的

                     ssm.decrypt(args.request, password, base_key)
                        .then(function (res) {
                            console.log(res)
                            parseString(res, async function (err, result) {
                                if (err) {
                               //the throws causes the error
                                    throw {
                                        Fault: {
                                            error: {
                                                data: {
                                                    error
                                                } //Error object from catch
                                            }
                                        }

                                    };
                                } else {
                                 //some code
                                }

谢谢

标签: javascriptnode.jsasync-awaitnode-soap

解决方案


在异步函数中抛出错误

parseString(res, async function (err, result)...

拒绝异步函数返回的承诺 - 没有 catch 处理程序。如果parseString同步调用其回调,您可以删除async声明,将调用保留为

 parseString(res, function (err, result)...

但是,如果 parseString 是异步的,则需要对其进行承诺,以便可以将错误处理到周围的承诺链中。作为一个未经测试的例子:

function doParseString( res) {
    return new Promise( function( resolve, reject) {
        parseSting( res, function( err, result) {
             err ? reject( err) : resolve( result);
        });  
    });
}

可以按照以下方式使用

ssm.decrypt(args.request, password, base_key)
.then( doParseString)
.then( function  (result) {
     // some code
 })
.catch( console.log);   // do something with the error

推荐阅读