JavaScript回调被多次调用

JavaScript回调被多次调用,javascript,asynchronous,callback,asynccallback,Javascript,Asynchronous,Callback,Asynccallback,仅供参考:这是伪代码,因为实际代码非常大 我有一个函数main。Main有一个回调,它应该被发送到mongodb中找到的结果数组中。例如,main将被发送一个URL数组,并应向其回调发送保存在Mongo中的每个URL的信息。基本上是一组对象 我的问题是,一切都是异步的,main多次调用它的回调 有人对函数同步有什么建议吗 您的目标是多次调用回调,但在主函数继续之前等待所有回调调用返回吗?我只希望从main调用一次回调。我尝试了一些方法,但是没有效果。嗯,findResultWithParams本

仅供参考:这是伪代码,因为实际代码非常大

我有一个函数main。Main有一个回调,它应该被发送到mongodb中找到的结果数组中。例如,main将被发送一个URL数组,并应向其回调发送保存在Mongo中的每个URL的信息。基本上是一组对象

我的问题是,一切都是异步的,main多次调用它的回调

有人对函数同步有什么建议吗


您的目标是多次调用回调,但在主函数继续之前等待所有回调调用返回吗?我只希望从main调用一次回调。我尝试了一些方法,但是没有效果。嗯,findResultWithParams本身被调用了好几次;你想摆脱for循环吗?另外,您在问题中提到的回调函数是回调函数,还是作为第三个参数传递给findResultWithParams的匿名函数?注意-我不熟悉Mongo和这个库,只熟悉JavaScript=我想从results数组中的findResultWithParams收集所有结果,并将其发送回作为参数发送到main的回调。一旦
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]);
            }
        });
    };
}