#azure #azure-functions
#azure #azure-функции
Вопрос:
В функции Azure, скажем, у меня есть:
const cosmosDBTrigger: AzureFunction = async function (context: Context, documents: any[]): Promise<void> {
if (!!documents amp;amp; documents.length > 0) {
documents.forEach(function (document) {
context.bindings.outputdocuments = document
//1 - SHOULD IT GO HERE
});
}
//2 - SHOULD IT GO HERE
}
Правильное ли место для размещения context.done
находится в позиции 1 или 2. А именно должно быть после каждого документа в цикле в самом конце?
Спасибо.
Комментарии:
1. forEach не является асинхронным, поэтому, если вы вызываете его в 1 месте, он будет вызывать done для первого элемента, также, если документы пусты, он вообще не будет вызываться. Поэтому следует перейти к 2
2. Правильно. Поэтому я поместил его в позицию 2, и он выводил только второй документ, а не первый. Я думаю, мне нужно использовать какой-то код ожидания?
3. Работает ли это сейчас?
Ответ №1:
Я не уверен, как это делается в node js, но я предполагаю, что должно быть что-то вроде этого
const cosmosDBTrigger: AzureFunction = async function (context: Context, documents: any[]): Promise<void> {
if (!!documents amp;amp; documents.length > 0) {
context.bindings.outputdocuments = documents;
}
context.done();
}
Причина, по которой у вас написан только последний документ, заключается в том, что если вы
context.bindings.outputdocuments = document
Это означает, что вы переопределяете вывод по последнему документу через цикл вместо предоставления массива.
Комментарии:
1. ОК. Это работает. Так что, я думаю, мне пришлось удалить цикл, поскольку он не требовался.