При экспорте асинхронной функции вы можете настроить привязку вывода для получения возвращаемого значения.Это рекомендуется, если у вас есть только одна выходная привязка.См. doc
Чтобы назначить вывод, используя return, измените свойство name на $ return в function.json.
{
"type": "http",
"direction": "out",
"name": "$return"
}
В этом случае ваша функция должна выглядетькак в следующем примере:
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
// You can call and await an async method here
return {
body: "Hello, world!"
};
}
Это должно работать.
Ваша асинхронная функция не будет ожидать обратного вызова.Вы должны заставить его ждать до завершения обратного вызова.
var azure = require('azure-storage');
var validate = require('validate.js');
var constraints = {
PartitionKey: {
presence: true,
email: true
},
description: {
presence: true
},
dueDate: {
presence: true
}
};
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
if (!(req.body && req.body.PartitionKey)
|| !(req.body && req.body.description)
|| !(req.body && req.body.dueDate)) {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
var input = req.body;
context.log('PartitionKey: ' + input.PartitionKey);
context.log('description: ' + input.description);
context.log('dueDate: ' + input.dueDate);
context.log(validate({ PartitionKey: input.PartitionKey }, constraints));
context.log(validate({ description: input.description }, constraints));
context.log(validate({ dueDate: input.dueDate }, constraints));
var entGen = azure.TableUtilities.entityGenerator;
var task = {
PartitionKey: entGen.String(input.PartitionKey),
RowKey: entGen.String('1'),
description: entGen.String(input.description),
dueDate: entGen.DateTime(input.dueDate)
};
let res = await tablework(task, context);
if(res.success) {
return {
status: 200,
body: {
result: res.result,
response: res.response
},
headers: {
'Content-Type': 'application/json'
}
};
}
else{
return {
status: 400, /* Defaults to 200 */
body: res.error,
headers: {
'Content-Type': 'application/json'
}
};
}
};
function tablework(task, context){
return (new Promise((resolve, reject) => {
var tableSvc = azure.createTableService();
tableSvc.insertEntity('events', task, function (error, result, response) {
if (!error) {
// Entity inserted
context.log(result);
resolve({
success: true,
result: result,
response: response
});
}
else {
context.log(error);
resolve({
success: false,
error: error
});
}
});
}));
}