我可以将单个 运行 的 Azure 函数中的多个项目排队吗?

Can I queue multiple items from a single run of an Azure Function?

我有一个 Node.js timerTrigger Azure 函数,它处理一个集合并将处理结果排队以供进一步处理(通过 Node.js queueTrigger 函数)。

代码如下:

module.exports = function (context, myTimer) {
    collection.forEach(function (item) {
        var items = [];

        // do some work and fill 'items'

        var toBeQueued = { items: items };

        context.bindings.myQueue = toBeQueued;
    });

    context.done();
};

此代码只会对最后一个 toBeQueued 进行排队,而不是我尝试对每个进行排队。

有什么方法可以让多个项目排队吗?

更新

明确地说,我说的是在 forEach 的每次迭代中对 toBeQueued 进行排队,而不仅仅是对数组进行排队。是的,Azure Functions 存在问题,因此我无法对数组进行排队,但我有解决方法;即 { items: items }.

还没有,但我们会在一周内解决这个问题,敬请关注:) 您将能够像上面尝试的那样将数组传递给绑定。

我们在 public 存储库 here 中跟踪这个问题。感谢报告。

Mathewc 的答案是关于节点的正确答案。

对于 C#,您现在可以通过指定 ICollector<T> 作为输出队列参数的类型。

下面是我有两个输出队列的示例,其中一个是我通过 for 循环添加的。

public static void Run(Item inbound, DateTimeOffset InsertionTime, ICollector<Item> outbound, ICollector<LogItem> telemetry, TraceWriter log)
{
    log.Verbose($"C# Queue trigger function processed: {inbound}");

    telemetry.Add(new LogItem(inbound, InsertionTime));

    if(inbound.current_generation < inbound.max_generation)
    {
        for(int i = 0; i < inbound.multiplier; i++) {
            outbound.Add(Item.nextGen(inbound));
        }
    }
}