0

Async.jsを使用して一連の非同期関数を起動しようとしています。以下は私のコードです。最初の 2 つの関数のみが実行されます。シリーズの 3 番目と 4 番目の関数は実行されません。考えられる機能を最も基本的なものに単純化しました。しかし、それでも実行しません。誰かが私が間違ったことを教えてもらえますか?

async.series([
        guessCollection.find( { user: user, imageFileName: imageFileName } ).count( function(err, number) {
        count = number;
        console.log(count);
        }),

        guessCollection.find( { user: user, imageFileName: imageFileName, correct: '1' } ).count( function(err, number) {
        correct = number;
        console.log(correct);
        }),

        function(){
            console.log("this text never doesn't get logged");
        },
        function() {
            console.log("neither does this text");

        }
    ]);

編集 --- 以下の回答で示唆されているように、最初の 2 つの適切な関数を作成しました。ただし、一連の関数の最初の関数のみが実行されます。関数 2 ~ 4 は呼び出されません。このコードには他に何か問題があるに違いないと思います。

async.series([
        function(){
        guessCollection.find( { user: user, imageFileName: imageFileName } ).count( function(err, number) {
        count = number;
        console.log(count);
        })
    },
        function(){
        guessCollection.find( { user: user, imageFileName: imageFileName, correct: '1' } ).count( function(err, number) {
        correct = number;
        console.log(correct);
        })
    },

        function(){
            console.log("this text never doesn't get logged");

        },
        function() {
            console.log("neither does this text");

        }
    ]);
4

3 に答える 3

4

このコードを見てください。3番目の関数はコールバック関数を呼び出さないため、1 2 3しか出力されないため、シリーズはここで停止します。 http://jsfiddle.net/oceog/9PgTS/

​async.series([
    function (c) {
        console.log(1);
        c(null);
    },        
    function (c) {
        console.log(2);
        c(null);
    },        
    function (c) {
        console.log(3);
//        c(null);
    },        
    function (c) {
        console.log(4);
        c(null);
    },        
    ]);​
于 2012-10-21T23:32:26.017 に答える
1

async.series機能のみを提供することになっています。配列の最初の項目は関数ではありません。これらの呼び出しを 1 つにラップする必要があります。

async.series([
  function () {
    collection.find().count(function () { … });
  },
  function () {
    collection.find().count(function () { … });
  },
  function () {
    console.log();
  },
  function () {
    console.log();
  }
]);
于 2012-10-21T23:24:55.943 に答える
0

コレクションの最初の 2 つの項目は関数のようには見えません。最初の 2 つの関数をすぐに呼び出しているように見えます。それとも、count() が関数を返しますか?

それらを呼び出していて、関数を async に渡していない場合、最後の 2 つの項目に到達する前に詰まるのはそのためです。

于 2012-10-21T23:24:42.377 に答える