Приложение Azure Function Azure не ожидает, как ожидается - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь использовать SDK хранилища Azure для узла для создания таблицы в хранилище таблиц, если она не существует.

Следующий код действителен и возвращает ответ 200, хотя нетсодержание ответа.Однако таблица создается, как и ожидалось.

После исследования я вижу, что приложение-функция Azure регистрирует следующее -

Создание таблицы «Тест».
[warn] Предупреждение: неожиданный вызов 'log' для объекта контекста после завершения выполнения функции.Пожалуйста, проверьте асинхронные вызовы, которые не ожидаются, или вызовы «done», выполненные до завершения выполнения функции.

Так что, похоже, что хотя createTableInTableStore работает, как ожидалось, часть асинхронного ожидания / ожиданиямоя функция неЯ подозреваю, что я делаю что-то не так, но, судя по всему, я правильно реализую await как и когда это требуется.

Как заставить функцию ждать, пока метод createTableInTableStoreзавершить, прежде чем двигаться дальше?

Пример кода

Обратите внимание, что требуется пакет Azure-Storage npm (npm install azure-storage).

module.exports = async function (context) {
    var azure_storage = require('azure-storage');
    var table_service = azure_storage.createTableService(process.env["AzureWebJobsStorage"]);
    var create_table_result = await createTableInTableStore(context, table_service, "Test");
    return {
        res: create_table_result
    };
};

async function createTableInTableStore(context, table_service, table_name) {
    context.log("Creating table '"+table_name+"'.");
    return await table_service.createTableIfNotExists(table_name, function(error, result, response) {
        if (!error && result) {
            context.log.info("[Info] Table created successfully.")
        } else if (!error && !result) {
            context.log.info("[Info] Table already exists.")
        }
        if (error) {
            context.log.error("[Error] An unexpected error occurred.")
            context.log.error(" -----> " + response)
        }
    });
}

1 Ответ

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

вы можете вернуть обещание, что это сработает.и используйте try catch для обработки ошибок при использовании await.

module.exports = async function (context) {
    try{
    var azure_storage = require('azure-storage');
    var table_service = azure_storage.createTableService(process.env["AzureWebJobsStorage"]);
    var create_table_result = await createTableInTableStore(context, table_service, "Test");
      return {
          res: create_table_result
      };
    }catch(err){
    //handle errr
    console.log(err);
     }
};

async function createTableInTableStore(context, table_service, table_name) {
    context.log("Creating table '"+table_name+"'.");
    return new Promise((resolve, reject) => {
      table_service.createTableIfNotExists(table_name, function(error, result, response) {
        if (!error && result) {
            context.log.info("[Info] Table created successfully.")
            resolve(result)
        } else if (!error && !result) {
            context.log.info("[Info] Table already exists.")
            resolve(response)
        }
        if (error) {
            context.log.error("[Error] An unexpected error occurred.")
            context.log.error(" -----> " + response)
            reject(error)
        }
    });
});
}
...