Функция Azure — должен ли context.done вызываться после каждого цикла или в конце

#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. ОК. Это работает. Так что, я думаю, мне пришлось удалить цикл, поскольку он не требовался.