0

キューを使用して非同期リクエストをシリアル化する必要があります。周りを見回すと、Mike Bostock による小さなライブラリが見つかりまし。しかし、promise オブジェクトと一緒に使用する方法については少し混乱しています。

そのため、ユーザー インターフェイスから大量の要求が寄せられています。

function addTask(d){
   AsyncOper(d)
      .then(function () {
             refresh()
      });
}

AsyncOper は promise オブジェクト (Angular js 実装 - $q) を返します。

私はaqを次のように定義しています

var q = queue(1);

どうすればaddTask使えるようになりますかq

私の最初の試みは次のとおりです。

    function addTask(d){
       q.defer(request, d)
       q.awaitAll(function(error, results) { console.log("all done!"); });
    }
    function request(d, cb) {
        AsyncOper(d)
            .then(function () {
                refresh();
                cb(null, "finished "+ d);
            })
    }

しかし、複数のリクエストを実行しようとしていることがわかるため、実際には操作をシリアル化していません。この方法で promise と queue を組み合わせることは可能ですか、それとももっと良い方法がありますか?

ありがとうございました。

4

1 に答える 1

3

https://github.com/mbostock/queueは、await と awaitAll について次のように述べています。

This method should only be called once, after any tasks have been
deferred. If the await callback is set multiple times, or set before 
a task is deferred, the behavior of the queue is undefined.

現時点では、タスクを延期するたびに awaitAll を呼び出しますが、これは明確なドラゴンのくすぐりです。すべてをキューに入れた後、すべて待機できる場所はありますか? そうでない場合、この特定のライブラリは適切ではない可能性があります。

于 2013-05-04T03:27:44.003 に答える