Node-Soap - выдает ошибку в асинхронном методе - PullRequest
2 голосов
/ 08 апреля 2019

Создан мыльный 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 голосов
/ 08 апреля 2019

Спасибо, ребята, за вашу помощь, но у меня возникла проблема

, если была использована асинхронная функция для SOAP API, реализованной с помощью node-soap

нужно сделать с помощью обратных вызовов

я изменил бросок на

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

                                                    });

и он отлично работает

я нашел его здесь node-soap doc

0 голосов
/ 08 апреля 2019

Создание ошибки внутри асинхронной функции

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

отклоняет обещание, возвращаемое асинхронной функцией, для которой нет обработчика перехвата.Если 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
...