0

サーバーからデータを取得するまで待機するためにnodejs asyncが必要なプロジェクトに取り組んでいます

以下は私がしたことです

非同期の応答: 「doUntil false、完了ウォーターフォール」の代わりに「完了ウォーターフォール完了 doUntil false」

サーバーの応答を OK に変更すると、「未定義のコールバック」というエラーが表示されました

getData OK { メッセージ: 'OK' }

TypeError: undefined は D:\node_modules\async\lib\async.js:729:17 の関数ではありません

var request = require('request-json')
    async   = require('async');

function startTest() {
    var self = this;
    self.on('fake', onFake);
    setInterval(function() {
        self.emit('fake', {fake: 'done'});
    }, 1000);
}

//doUntil
function onFake(data) {
    async.waterfall(
        [
            //get data and test against message === 'OK'
            function(next) {
                var _message = false;
                async.doUntil(
                    //iterator
                    function(done) {
                        getData(function(err, res) {
                            if(err) {
                                console.log('getData KO');
                                done(err, null);
                            }else{
                                console.log('getData OK', res);
                                done(null, res);
                            }
                        });
                    },
                    //test against
                    function(resp){
                        if( Boolean(resp.message === 'OK') ){
                            _message = Boolean(resp.message === 'OK');
                        }
                        return Boolean(resp.message === 'OK');
                    },
                    //done
                    next(null, 'done doUntil ' + _message)
                )
            },
            //done previous step
            function(message, next) {
                next(null, message);
            }
        ],
        function(err, res) {
            if(err) {
                console.log('done waterfall', err);
            }else{
                console.log('done waterfall', res);
            }
        }
    );
}

function getData(callback) {
    client = request.newClient('http://localhost/');
    client.get('cryptsy/stackoverflow/data.json', function(err, res, body) {
        if(!err) {
            return callback(null, body);
        }else{
            return callback(err, body);
        }
    });
}
startTest()
4

1 に答える 1

1

これを置き換えます:

                    //test against
                    function(resp){
                        if( Boolean(resp.message === 'OK') ){
                            _message = Boolean(resp.message === 'OK');
                        }
                        return Boolean(resp.message === 'OK');
                    },
                    //done
                    next(null, 'done doUntil ' + _message)
                )

これとともに

                //test against
                function(resp){
                    if( Boolean(resp.message === 'OK') ){
                        _message = Boolean(resp.message === 'OK');
                    }
                    return Boolean(resp.message === 'OK');
                },
                //done
                function(resp) {
                    next(null, resp);
                }
            )
于 2014-08-15T17:50:12.907 に答える