Hoi hoi,


Ben een beetje het stoeien met JavaScript en wil graag dat functie B pas na functie A word gestart.
Ik heb een klein opzetje gemaakt


function1(function() {
  function2();
});



function function1(callback){
     var mLog = document.getElementById("log");

var w, df, delta1, alfa; 
function chi_power(n) { return n; }

var calc_power = 0, power = 100000000; 

function calculate(n) {
  if (n<10000000000000 && calc_power<power) {
    calc_power=chi_power(n,w,df,delta1,alfa);
    var message="n="+n+"<br>";
    progress(mLog,message);

    // proceed with the loop
    setTimeout(function () { calculate(n*2); }, 0);
  }
}

function progress(mLog, message) {
  mLog.innerHTML += message;
}

calculate(1);
  callback();
} 

function function2(){
  alert('Functie 1 is klaar'); 
}


Maar toch word de alert al eerste gegeven, wat eigenlijk pas na functie 1 zou mogen gebeuren.

function1(function() {  function2(); });



function function1(callback)
{
	var mLog = document.getElementById("log");
	var w, df, delta1, alfa;
	function chi_power(n)
	{
		return n;
	}

	var calc_power = 0, power = 100000000;

	function calculate(n)
	{
		if (n<10000000000000 && calc_power<power)
		{
			calc_power=chi_power(n,w,df,delta1,alfa);
			var message="n="+n+"<br>";
			progress(mLog,message);

		    // proceed with the loop
			setTimeout(function () { calculate(n*2); }, 0);
		}
	}

	function progress(mLog, message)
	{
		 mLog.innerHTML += message;
	}

	calculate(1);
	callback();
}

function function2()
{
	alert('Functie 1 is klaar');
} 

function1 geeft de hele function2 door.
En al die andere functies zitten in function1.
Vast niet de bedoeling.
Waarom zou je een setTimeout met een timeout van 0 doen? De function setTimeout is asynchroon, dus na de eerste keer wordt meteen function2 aangeroepen in function 1. Als je die setTimemout verwijdert, werkt het prima.

@SanThe: Hé, ouwe vriend! :-) Keertje borrelen? (Zie je PM)
In JavaScript zijn "inner" functions geen probleem, dat mag gewoon.


<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
</head>

<body>
    <pre id="log"></pre>
    <script>
    var mLog = document.getElementById("log");

    function progress(message) {
        mLog.innerHTML += message;
    }

    function function1(callback) {
        var w, df, delta1, alfa;
        var calc_power = 0,
            power = 100000000;

        function chi_power(n) { return n; }

        function calculate(n) {
            if (n < 10000000000000 && calc_power < power) {
                calc_power = chi_power(n, w, df, delta1, alfa);

                progress('n=' + n + '<br>');
                calculate(n * 2);
            }
        }

        calculate(1);
        callback();
    }

    function function2() {
        progress('calling function 2' + '<br>');
    }

    function1(function2);
    </script>
</body>

</html>
Jan Koehoorn op 22/05/2022 18:55:53


@SanThe: Hé, ouwe vriend! :-) Keertje borrelen?


Eigenlijk wordt het toch eens tijd dat er een PHPhulp meeting moet komen. ;-)
Moet wel met de trein bereikbaar zijn hahaha!!
[offtopic]
Hebben we in een (ver) verleden een aantal keer gedaan. Is hartstikke leuk, je ziet eindelijk de gezichten die bij de namen horen.
[/offtopic]

Reageren