Avatar billede neo.net Nybegynder
15. november 2002 - 14:18 Der er 15 kommentarer og
1 løsning

Pause i en funktion

Hvordan kan jeg lave en funktion, der ikke returnere noget, før at en variabel er true?

Her er lidt af mine tanker:

<script>
var status = false;
function test(){
  setTimeout(test2,3000);
  while(!status){

  }
  return "streng";
}

function test2(){
  status = true;
}
</script>


/neo.net
Avatar billede Slettet bruger
15. november 2002 - 14:22 #1
Det kan du nok ikke lave på den måde, men du kan sikkert omgå det på en anden måde. Hvad har du i tankerne?
Avatar billede Slettet bruger
15. november 2002 - 14:24 #2
Eller i virkeligheden burde dit eksempel virke, det er bare meget ressourcekrævende.
Avatar billede Slettet bruger
15. november 2002 - 14:24 #3
Og måske kommer der stack overflow eller noget i den stil!
Avatar billede neo.net Nybegynder
15. november 2002 - 14:25 #4
Jeg skal kalde en .NET webservice client-site, via en .htc fil fra microsoft (webservice.htc).. Det der er problemet er at den funktion jeg skal have lavet, ikke må returnere noget, før jeg har fået svar fra WebService'en.
Avatar billede neo.net Nybegynder
15. november 2002 - 14:26 #5
Jep, browseren går kold uanset hvad jeg prøver, synes jeg. :-(
Avatar billede Slettet bruger
15. november 2002 - 14:28 #6
Du kan vel bare køre et timeout, der kalder sig selv tjekker, om du har fået svar, og når du har det, sætter den bare en variabel, som du så kan aflæse!
Avatar billede neo.net Nybegynder
15. november 2002 - 14:30 #7
Webservice.htc kalder en function, når den er klar med dataene. Denne funktion ser sådan ud:

    function getData(){
        try{
            if((event.result.error))
            {
                var xfaultcode = event.result.errorDetail.code;
                var xfaultstring = event.result.errorDetail.string;
                var xfaultsoap = event.result.errorDetail.raw;

                alert("Error: "+xfaultstring);
            }
            else
            {
                status = true;
                data = event.result.value;
            }
        }
        catch(e){}
    }

Når den sætter status=true har den fået svar. Og data bliver nu lig resultatet fra webservice'en. Jeg skal fra en anden funktion have fat i variablen data, når status er = true.
Avatar billede Slettet bruger
15. november 2002 - 14:38 #8
Så kalder du da bare funktionen inde i getData!
Avatar billede neo.net Nybegynder
15. november 2002 - 14:48 #9
Det kan jeg ikke!!!!! Jeg prøver at forklare:

Jeg har følgende kode:

    var status = false;
    var data;
   
    function callWebService(){
        useService("/MenuTree.asmx?WSDL","MenuTree");
        MenuTree.callService("getChildren",0);

        return data;
    }

    function getData(){
        try{
            if((event.result.error))
            {
                var xfaultcode = event.result.errorDetail.code;
                var xfaultstring = event.result.errorDetail.string;
                var xfaultsoap = event.result.errorDetail.raw;

                alert("Error: "+xfaultstring);
            }
            else
            {
                status = true;
                data = event.result.value;
            }
        }
        catch(e){}
    }

Jeg kalder funktionen callWebService fra en anden fil og forventer at få resultatet af webservice'en tilbage.

callWebService kalder så WebService'en "MenuTree.asmx" via WebSrvice.htc. Denne kalder så getData, når den er klar med dataene. Og jeg må ikke kalde callWebService igen, da den så vil kalde Webservicen igen på serveren.

Håber den kan forklare problemstillingen lidt bedere.

Problemet er så at callWebservice ikke må returnere noget før status = true.
Avatar billede neo.net Nybegynder
15. november 2002 - 14:49 #10
useService og callService er nogle funktioner i WebService.htc.....
Avatar billede Slettet bruger
15. november 2002 - 15:28 #11
Jamen hvorfor skal callWebService returnere noget? Kan du ikke bare aflæse variablen data i den sammenhæng, du nu skal bruge den?

Du må undskylde gætteriet, men jeg kender ikke .NET særlig godt.
Avatar billede neo.net Nybegynder
15. november 2002 - 15:37 #12
Det er fordi, jeg skal have behandlet de returnerede data inden jeg sender dem tilbage.
Avatar billede Slettet bruger
15. november 2002 - 15:43 #13
I så fald kan du vel bare køre et timeout:

setTimeout("if (status) dinFunktion();", 500);

Når status sættes til true ét eller anddet sted køres dinFunktion().
Avatar billede humlebidk Nybegynder
17. november 2002 - 03:18 #14
fra indlægget.. prøv lige dette: setTimeout(test2(),3000); bemærk parenteserne. *s*
Avatar billede Slettet bruger
17. november 2002 - 11:22 #15
Nej, humlebidk, så skal der gåseøjne rundt om. Under alle omstændigheder burde neo.net's virke i alt andet end på Mac. Det er slet ikke det, der er problemstillingen.
Avatar billede neo.net Nybegynder
25. november 2002 - 12:44 #16
Jeg er ked af det, men jeg kan desværre ikke rigtigt bruge noget af det i har skrevet, men mange tak for hjælpen alligevel.

/neo.net
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester