我可以从Azure功能的单次运行中排队多个项目吗?

时间:2016-04-02 14:23:26

标签: node.js azure azure-storage-queues azure-functions

我有一个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而不是每个我正在排队的队列。

有没有办法排队多个项目?

更新

要清楚,我在谈论在toBeQueued的每次迭代中排队forEach,而不仅仅是排队一个数组。是的,Azure Functions存在一个问题,因为我无法对阵列进行排队,但我有一个解决方法;即,{ items: items }

2 个答案:

答案 0 :(得分:4)

还没有,但是我们会在一周内解决这个问题,请继续关注:)您可以将数组传递给绑定,因为您正在尝试上面做。

我们在公开回购here中有一个跟踪此问题的问题。感谢您的报道。

答案 1 :(得分:3)

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));
        }
    }
}