Node-Soap-在异步方法中引发错误

时间:2019-04-07 21:24:03

标签: javascript node.js async-await node-soap

使用node-soap库创建了一个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
                                }

谢谢

2 个答案:

答案 0 :(得分:0)

在异步函数内引发错误

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

拒绝异步函数返回的promise-没有捕获处理程序。如果parseString同步调用其回调,则只需删除async声明,将调用保留为

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

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

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

答案 1 :(得分:0)

谢谢大家的帮助,但我遇到了问题

如果对肥皂api使用了异步功能,请使用node-soap

通信需要通过回调完成

我将投掷更改为

                                                   callback({
                                                        Fault: {
                                                            error: {
                                                                data: {
                                                                    error
                                                                } 
                                                            }
                                                        }

                                                    });

效果很好

我在这里node-soap doc

找到了它