Como usar um Ng-if com Firebase

Eu sei que a diretiva ng-if cria um novo escopo filho e gostaria de saber como e se é possível reproduzir um ng-if em outra.

Por enquanto não consigo ver nenhum ícone. Eu tentei ng-hide, mas vi os dois ícones ao mesmo tempo, impossíveis de resolver esse problema ... Eu também tentei o ng-show, mas com os mesmos resultados que o ng-if.

A função Set () retorna true ou false, está funcionando porque eu posso ver o resultado no console.

Alguma ideia ?

$scope.set = function($r)
{
    firebase.database().ref('events/'+$r.selfID).once("value").then(function(snapshot)
    {   
        var nbPerson = snapshot.val().nbPerson;
        var varPerson = snapshot.val().varPerson;

        //console.log("nbPerson :", nbPerson);
        //console.log("varPerson", varPerson);

        if(nbPerson === varPerson)
        {
            //console.log("true");
            return true;
        }
        else
        {
            //console.log("false");
            return false;
        }
    });
};
<button ng-if ="give(f) === false" class="badge badge-positive" ng-click="joinEvent(e)">

    <span ng-if ="set(r) === true">
        <ion-icon class="ion-person-add give-var"></ion-icon>
    </span>


    <span ng-if ="set(r) === false">
        <ion-icon class="ion-person-add var"></ion-icon>
    </span>

</button>

EDIT:

Eu adicionei a função set (), $ r é um registro de um banco de dados Firebase, tem uma variável "selfID" com seu ID de registro.

Eu tenho certeza que a função give () está funcionando, porque eu tenho outro botão rodando com o ng-if = "give (f) === true".

Todo esse código está funcionando no mesmo controlador.

EDIÇÃO 2: (novo trecho)

EDIT 3: (adicione $ q na dependência)

function ($scope, $rootScope, $q, $stateParams, $firebase, $firebaseArray, $state, $ionicPopup) {

    $scope.set = function($r)
    {
        $scope.varPerson = "";
        $scope.nbPerson = "";

        var basePromise = firebase.database().ref('events/'+$r.selfID).once("value");

        $q.when(basePromise).then(function(snapshot)
        {
            $scope.nbPerson = snapshot.val().nbPerson;
            $scope.varPerson = snapshot.val().varPerson;

            if($scope.nbPerson === $scope.varPerson)
            {
                return true;
            }
            else
            {
                return false;
            }
        });
    }
};

EDIT 4: (Finalmente)

Ok, não consegui lidar com os problemas síncronos, então simplesmente adicionei um teste dentro dos dois ng-if, portanto, sem a função set ().

Muito obrigado por quem me ajudou, e especialmente @georgeawg por sua experiência!

    <span ng-if ="r.nbPerson === r.varPerson">
        <ion-icon class="ion-person-add give-var"></ion-icon>
    </span>

    <span ng-if ="r.nbPerson > r.varPerson">
        <ion-icon class="ion-person-add var"></ion-icon>
    </span>

questionAnswers(2)

yourAnswerToTheQuestion