Внутри асинхронной функции ничего не происходит (отправьте запрос с помощью easysoap) - PullRequest
0 голосов
/ 25 марта 2019

Я новичок в node.js и уже несколько дней экспериментирую.Сегодня я попытался отправить XML-запрос к API с использованием easysoap-запроса.Он работал отлично, но мне пришлось бы создавать XML-файл для каждого отдельного запроса, поэтому я попытался с помощью easysoap.Вот мой код:

const EasySoap = require('easysoap');
console.log("test");
(async () => {

    const params = {
        host    : 'https://comeapi.com',
        path    : '/dir/soap',
        wsdl    : '/dir/wsdl',
        headers: [{
            'user-agent': 'Request-Promise',
            'Content-Type': 'text/xml',
        }]
    }

    var soapClient = EasySoap(params);

    soapClient.call({
        method    :'one_methode',
        attributes: {
            xmlns: 'https://someapi.com'
        },
        params: {
            'api' : {
                'authentication' : {
                    'login' : 'mylogin',
                    'password' : 'mypassword'
                },
                'params' : {
                    'another_params' : {
                        'name' : 'Brian',
                    }
                }
            }
        }
    }).then((callResponse) => {
        console.log(callResponse.data); // response data as json
        console.log(callResponse.body); // response body
        console.log(callResponse.header);  //response header
    }).catch((err) => { 
        throw new Error(err);
    });
    console.log("test2");
});
console.log("test3");

Когда я запускаю свой файл командой node, он показывает мне только «test» и «test 3» в терминале, а не ответ API,Я не понимаю проблему в моей программе, потому что я уже использовал функцию "(async () => {" в предыдущих программах, и это довольно хорошо сработало.

Спасибо за вашу помощь. ^^

Редактировать: я добавил недостающую часть в свой код, и теперь есть что-то новое. Это ошибка, и я ее не понимаю ...

(узел: 10264) UnhandledPromiseRejectionWarning:Ошибка: Ошибка: нет ответа wsdl / xml в soapClient.call.then.catch (C: \ Users \ user \ Documents \ src \ script.js: 40: 15) в process._tickCallback (внутренняя / process / next_tick.js:68: 7) (узел: 10264) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .catch (). (Идентификатор отклонения:1) (узел: 10264) [DEP0018] DeprecationWarning: Необработанные отклонения обещаний устарели. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым exit code.

Это проблема с .catch ()?Может кто-нибудь объяснить мне?Спасибо

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Ваша асинхронная функция должна быть вызвана. В настоящее время вы только декларируете функцию. Для его выполнения необходимо заменить строку перед console.log("test3"); на })();

0 голосов
/ 25 марта 2019

Ваша функция только определена, но никогда не вызывается.Вызовите вашу функцию в конце определения

(async () => {
    ....

    console.log("test2");
})(); // call this function by adding this parenthesis 

Это называется функцией IFFY (выражение с немедленным вызовом функции) в javascript


Если вы не хотите использоватьIFFY назовите вашу функцию и назовите ее, как это

const f = async () => {
    ....

    console.log("test2");
}

f()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...