2016-04-02 5 views
1

私はNode.js timerTrigger Azure関数を使用してコレクションを処理し、さらに処理するために処理結果をキューに入れます(Node.js queueTrigger関数による)。Azure関数の1回の実行から複数​​のアイテムをキューに入れることはできますか?

コードは、次のようなものです:

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

このコードだけで私はキューしようとしている各1 toBeQueued最後とされていないキューに入れます。

複数のアイテムをキューに入れる方法はありますか?

更新

明確にするために、私はちょうど配列をキューイングではない、forEachの各反復でtoBeQueuedをキューイングについて話しています。はい、配列をキューに入れることができないのでAzure関数に問題がありますが、回避策があります。すなわち{ items: items }である。

答えて

3

まだ、しかし、私たちは週内にそれに取り組んでいきます。チューニングしておいてください:上でやろうとしているように、バインディングに配列を渡すことができます。

私たちは、公開リポジトリhereでこれを追跡する問題があります。報告してくれてありがとう。

+0

GitHubのリポジトリを参照していただきありがとうございます。私たちは2つの異なる問題について話していると思います。私はこの点を明確にするために質問を更新する。 – TheBlueSky

+0

私はその区別を見る。上記の配列修正の後のNode.jsでは、あなたの関数が返ってから**そのメッセージの配列が処理されます**。私。機能が完了するまで実際のメッセージキューイングは発生しません。私はそれが最も一般的なシナリオに対処すると思います。配列のキューイングに関する上記の回避策について - 複数の個々のキューメッセージが書き込まれるわけではありません。配列のサポートは、複数の個々のメッセージをエンキューする必要があるシナリオ用です。 – mathewc

+0

うん、わかった..あなたが言ったように、私は配列の問題に対処するためにのみ回避策を使用しました。だから私の質問に戻ると、私が達成しようとしているシナリオはサポートされていません、(1)それは?、そして(2)私のオプションは何ですか? – TheBlueSky

3

Mathewcの答えが正しいノードです。

今日は、ICollector<T>を出力キューパラメータのタイプとして指定することができます。

以下は2つの出力キューを持つ例ですが、そのうちの1つは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)); 
     } 
    } 
} 
+2

また、AddAsync()にIAsyncCollector があります。 –

関連する問題