Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    26

    Return di un valore in una funzione nidificata

    Ciao a tutti, avrei bisogno di realizzare il seguente script, ma ho alcune difficoltà a recuperare il valore della variabile output generata all'interno della funzione eseguita tramite img.onload. Lo script completo è molto più complesso di quello riportato, ma siccome il problema risiede qui ho tagliato il resto.

    Essenzialmente quando l'immagine viene caricata viene assegnato un valore alla variabile output (in questo caso - a titolo esemplificativo - sono i millisecondi). Questo valore vorrei fosse il return della funzione principale prova(). Premetto che non posso dividere le due funzioni in quanto altri parametri vengono passati alla funzione interna.

    codice:
    <script type="text/javascript">
    function prova(){
        var output="N/A";
        var img=new Image();
        img.src='https://www.google.it/images/srpr/logo3w.png';
    
        img.onload=function(){
            var milliseconds=new Date().getTime();
            return output= milliseconds;
        }
        return(output);
    }
    
    alert(prova());
    </script>
    Il codice riportato, se eseguito, mostra l'alert con il messaggio "N/A" anzichè i millisecondi.. Sono a corto di idee, potete illuminarmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    è un problema di asincronismo, quando viene eseguito il return l'immagine non è stata ancora caricata e di conseguenza la variabile output non è stata valorizzata con il millisecondi. Potresti fare qualcosa del genere:

    codice:
    function prova(callback){
        var output="N/A";
        var img=new Image();
        img.src='https://www.google.it/images/srpr/logo3w.png';
    
        img.onload=function(){
            callback(new Date().getTime());
        }
    }
    
    prova(function(milliseconds){
        alert(milliseconds);
    });

  3. #3
    Non puoi farlo cosi'!!

    L'immagine viene caricata in modo asincrono, quindi quando prova() finisce la onload sta ancora aspettando di essere chiamata. Per fare in modo che quel pezzo di codice funzioni devi fare una cosa del genere:

    codice:
    <script type="text/javascript">
    function prova(callback){
        var img=new Image();
    
        img.onload=function(){
            var milliseconds=new Date().getTime();
            callback(milliseconds);
        };
    
        img.src='https://www.google.it/images/srpr/logo3w.png';
    }
    
    prova(function(ms){
        alert(ms);
    });
    </script>
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660


    stessa identica risposta nello stesso identico momento! manco farlo apposta

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    26
    Che stupido, mi era sfuggito il problema dell'asincronismo.. ovviamente non poteva funzionare! Grazie mille per l'aiuto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.