У меня есть следующий код, который использует мыльный веб-сервис:
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
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); })();