Node.js: дождаться выполнения двух колбеков и запустить третий
Я себе сделал банальную очередь. Но это в клиенском жс. Мне нужно было сделать несоколько аяксовых запросов, а затем когда все закончится выполнить один результирующий (или не один) в итоге вышла такая хрень:

var queryQueue = {
	counter: 0,
	finishEvents: [],
	push: function()
	{
		queryQueue.counter ++;
	},
	pop: function()
	{
		queryQueue.counter --;
		if( queryQueue.counter === 0 )
		{
			queryQueue.fireFinish();
		}
	},
	addFinishEvent: function( func )
	{
		queryQueue.finishEvents.push( func );
		if( queryQueue.counter === 0 )
		{
			queryQueue.fireFinish();
		}
	},
	fireFinish: function()
	{
		var func = null;
		while( func = queryQueue.finishEvents.pop() )
		{
			func();
		}
	}
}

В итоге когда делаем что-то, выполняем quertQueue.push() когда действие закончилось queryQueue.pop()
после всех пушей добавляем обработчики, которые выполнятся по окончанию всех запросов (или сразу если очередь пуста).
Вариант с флагами сразу отмел, так как при изменении количества задач придется менять количество флагов.
А банальный вариант с двумя булами не устраивает?

var firstCallFinished = false;
var secondCallFinished = false;

... вызов асинхронов ...

function firstCallback()
{
    firstCallFinished = true;
    checkFunction();
}
function secondCallback()
{
    secondCallFinished = true;
    checkFunction();
}

function checkFunction()
{
    if (!firstCallFinished || !secondCallFinished)
        return;
    firstCallFinished = false;
    secondCallFinished = false;
    ... тут вызов нужной Вам функции ...
}
