node.js: потреблять обещания, используя await - PullRequest
0 голосов
/ 05 июня 2019

У меня есть следующий код, который использует мыльный веб-сервис:

var soap = require('soap');
var url = 'http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL';
var args = { ubiNum: '1234' };

soap.createClientAsync(url).then((client) => {
  return client.NumberToWordsAsync(args);
}).then((result) => {
  console.log(result[0].NumberToWordsResult)
});

И я пытаюсь переписать его с помощью await, это моя попытка сделать это:

var soap = require('soap');
var url = 'http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL';
var args = { ubiNum: '1234' };

var client = await soap.createClientAsync(url);
var result = await client.NumberToWordsAsync(args);
console.log(result[0].NumberToWordsResult)

Но я получаю следующую ошибку:

var client = await soap.createClientAsync(url);
             ^^^^^
SyntaxError: await is only valid in async function

Чего мне не хватает?

Кстати: вот repl на тот случай, если кто-то захочет поиграть с ним: https://repl.it/@opensas/BasicNodeSoapClientWithPromises

1 Ответ

1 голос
/ 05 июня 2019

await будет работать только внутри асинхронных функций.Вы не можете ставить операторы ожидания кроме асинхронных функций.Таким образом, вы можете переписать ваш код, например,

(async function() {
  var soap = require('soap');
  var url = 'http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL';
  var args = { ubiNum: '1234' };

  var client = await soap.createClientAsync(url);
  var result = await client.NumberToWordsAsync(args);
  console.log(result[0].NumberToWordsResult);
})();
...