I'm attempting to use the Azure storage SDK for node to create a Table in Table Store, if it does not exist.
The following code is valid and returns a 200 response, although there is no response content. However, the table is created as expected.
Upon investigation, I can see that the Azure Function app is logging the following -
Creating table 'Test'.
[warn] Warning: Unexpected call to 'log' on the context object after function execution has completed. Please check for asynchronous calls that are not awaited or calls to 'done' made before function execution completes.
So it seems that while the createTableInTableStore
is working as expected, the async/await part of my function is not. I suspect that I'm doing something wrong, but from the looks of it I am correctly implementing await
as and when it's requried.
How can I get the function to wait for the createTableInTableStore
method to complete before it move on?
Please note that the azure-storage npm package is required (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)
}
});
}
you can return a promise it will work. and use try catch to handle errors when you use 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);
}
};
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)
}
});
});
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With