0

参考: 実際のコードは非常に大きいため、これは疑似コードです。

関数 main() があります。Main には、mongodb で見つかった結果の配列を送信する必要があるコールバックがあります。例として、main には URL の配列が送信され、URL ごとに Mongo に保存された情報をコールバックに送信する必要があります。基本的にオブジェクトの配列。

私の問題は、すべてが非同期であり、メインがそのコールバックを複数回呼び出していることです。

関数を同期させることについて誰かアドバイスはありますか?

var db = require('moongoose');
mongoose.connect(__config.db.connect);
Schema = mongoose.Schema;

var scrapeSchema = require('./scrape.schema');
var Scrape = mongoose.model('Scrape', scrapeSchema);

function findResultWithParams(findParams, select, callback) { 
    Schema.find(findParams).sort('-timestamp').select(select).exec(function (err, found) {
        if (err) return handleError(err);

        callback(err, found[0]);
    });
}

function main(array, callback) {
    var results = [];

    var addToResults = function(err, found) {
        results.push(found);
        if(results.length >= array.length) callback(err, results);
    }

   for(var i = 0; i < array.length; i++)
   {
        findResultWithParams({ _id: array[0]._id }, '', function (err, foundArray) 
        {
            if (!foundArray || foundArray.length <= 0 || isTooOld(foundArray[0].timestamp, msg.header.maxResponseAge)) {
                console.log('findResultWithParams Return false');
                callback(err, false);
            } else {
                console.log('findResultWithParams ok');
                addToResults(err, foundArray[0]);
            }
        });
    };
}
4

0 に答える 0