Я переписал ваш код, используя Axios . Он имеет встроенную поддержку async / await и упрощает работу кода, как и следовало ожидать, поскольку асинхронный код работает как синхронный код.
Я думаю, что главная проблема, с которой вы, возможно, сталкивались, в том, что все в JavaScript асинхронно. В результате время выполнения функции Azure завершалось до завершения асинхронной функции, поскольку она не блокировалась, как синхронный код при выполнении HTTP-запроса. Если вы хотите использовать обратные вызовы, вам нужно вызвать context.done()
внутри функции обратного вызова, чтобы функция Azure не закрывалась до завершения обратного вызова. Используя async / await, вы можете гарантировать, что ваш код будет блокироваться по HTTP-запросу до тех пор, пока он не получит ответ или тайм-аут. В приведенном ниже примере Axios вернет объект ответа, который включает данные в качестве элемента. Я извлекаю данные с помощью операции деконструкции, которая позволяет мне регистрировать data
.
const axios = require('axios');
const url = 'https://google.com';
module.exports = async function (context, myTimer) {
try {
const { data } = await axios.get(url);
context.log(data);
// do something with the data
} catch (err) {
context.error(err);
}
context.done();
}
Чтобы установить пакет в функции Azure
- Перейти на портал Azure; выберите приложение-функцию Azure
- Выберите
Platform Features
. Тогда Advanced Tools (Kudu)
под Средства разработки
- Используя файловый менеджер, перейдите к
site/wwwroot/
. Там вы должны увидеть файл package.json
и несколько папок с именами ваших функций.
- Из этого каталога запустите
npm install --save axios
- Чтобы подтвердить, что это работает, отредактируйте
package.json
с помощью значка карандаша. axios
должно быть указано в dependencies
элемент json