1

csv ストリームから mongoDB に保存するオブジェクトのセットを作成しています。csv 行ごとに、保存する前に、オブジェクトが MongoDB に存在しないことを確認する必要があります。以下のコードは、GET ルート内で実行されます。

非同期ウォーターフォールを使用しようとしていますが、期待どおりに動作しません。

ここにコードがあります

    async.waterfall([
        function (callback) {

            console.log('in function 1');
        -->  Diagnosis.findOne({name: diagnosisName}, function (doc){
                console.log(JSON.stringify(doc))
            })
            callback(null);

        },
        function (callback) {

            console.log('in function2')
            callback(null)
        }],

    function(err, results) {
        console.log('finished!')
        res.send("complete");
    })

私はこれが次を返すことを期待します

機能1で

JSON の doc オブジェクト

function2 で

終了した!

代わりに私は得る

関数 1 で

function2 で

終了した!

ヌル

findOne() 呼び出しがない限り、期待どおりに実行されます。私は何が欠けていますか??

とても有難い

4

2 に答える 2

0

最初の関数で:

    function (callback) {

        console.log('in function 1');
    -->  Diagnosis.findOne({name: diagnosisName}, function (doc){
            console.log(JSON.stringify(doc))
        })
        callback(null);

    },

コールバックは、非同期の findOne を呼び出した後に呼び出されます。findOne が完了するたびに、コールバックを使用する必要があります。つまり:

    function (callback) {

        console.log('in function 1');
    -->  Diagnosis.findOne({name: diagnosisName}, function (doc){
            console.log(JSON.stringify(doc))
            callback(null);
        })


    },

またはさらに良い

    function (callback) {

        console.log('in function 1');
    -->  Diagnosis.findOne({name: diagnosisName}, callback);


    },
    function (callback, doc) {
        console.log(JSON.stringify(doc))
        callback(null);
    },
于 2015-06-17T21:19:02.413 に答える