Я хочу использовать функцию Azure, запускаемую по таймеру, для генерации количества аксиальных пост-вызовов для изменения настройки пропускной способности ряда коллекций CosmosDB.
В соответствии с журналами запустится приведенный ниже код (т.е.появляется сообщение «[ Информация] Функция запущена »), но затем больше не регистрируется, и функция завершается с кодом состояния 202 Принято .
У меня естьподозрение, что проблема вызвана тем, как я выполняю обещания Axios, но после многих попыток я обращаюсь за помощью к Stackoverflow.
Любая помощь будет принята с благодарностью.
const axios = require("axios");
const azure = require("azure-storage");
const functionURL = "https://<redacted>.azurewebsites.net/api/ChangeRU?code=<redacted>"
// Update Offer for Collection
function updateOffer_for_Collection_RESTCall(
environment,
database,
collection,
newRU
) {
context.log(`\nUpdate throughput for collection (${collection}) in database (${database}) of environment (${environment}) to: ${newRU}`);
// Execute REST call
const url = functionURL + "&env=" + environment + "&database=" + database + "&collection=" + collection + "&ru=" + newRU;
context.log(`url = ${url}`);
return url;
}
module.exports = function (context, myTimer) {
var timeStamp = new Date().toISOString();
context.log('Scale down job started:', timeStamp);
if (myTimer.isPastDue) {
context.log('Scale down job is running late!');
}
var collectionTableService = azure.createTableService("<storageaccount>", "<redacted>");
const query = new azure.TableQuery()
.top(2)
.where('PartitionKey eq ?', 'DBCollections');
context.log('Query created...');
collectionTableService.queryEntities('DBCollections', query, null, function (error, result, response) {
if (!error) {
// result.entries contains entities matching the query
const collections = result.entries;
let axiosArray = [];
for (let collection of collections) {
context.log("Collection: " + JSON.stringify(collection) + "\n");
// Process collection
let url = updateOffer_for_Collection_RESTCall(collection.environment._, collection.database._, collection.collection._, 400);
let newPromise = axios({
method: 'post',
url: url,
data: {}
});
axiosArray.push(newPromise);
};
axios
.all(axiosArray)
.then(
function (results) {
let temp = results.map(r => r.data);
context.log('submitted all axios calls');
})
.catch(error => { });
context.done();
} else {
context.log('Error retrieving records from table DBCollections: ' + error);
context.done();
}
});
};