2

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

代码如下所示:

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在 的每次迭代中对a 进行排队forEach,而不仅仅是对数组进行排队。是的,Azure Functions 存在问题,因此我无法对数组进行排队,但我有一个解决方法;即,{ items: items }

4

2 回答 2

5

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

我们在此处的公共回购中跟踪此问题时遇到了问题。感谢您的报告。

于 2016-04-02T16:02:01.800 回答
4

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));
        }
    }
}
于 2016-04-02T16:19:23.193 回答