2016-06-09 12 views
4

Ich möchte die Funktion warten, bis mein Wert in Java-Skript zurückgegeben wird.Wie man eine Funktion wartet bis Rückgabewert?

i Code unten versucht, es ist nicht für mich arbeiten

Code:

calculate().done(function(result) { 
    alert(result); 
}); 
+0

Können Sie mehr Code anzeigen? Und einige funktionierende Code zu überprüfen – Shrabanee

+4

Was ist 'Calculate()'? Was ist "getan"? Benutzt du eine Bibliothek? – evolutionxbox

+1

Das ist genau das, was JavaScript-Funktionen im Allgemeinen tun, weil JavaScript meist synchron und single-threaded ist. Um asynchrone Funktionen und mehrere Threads verwenden zu können, müssen Sie sehr spezifische Dinge tun - tun Sie sie nicht, wenn Sie sie nicht brauchen. –

Antwort

5

Wenn berechnen Ihre Funktion ist, können Sie eine aufgeschobene Objekt verwenden. Nach 2 Sekunden sollte die Done-Funktion ausgelöst werden.

var calculate = function() { 
 
    var deferred = new $.Deferred(); 
 
    var test_data = "Hello World!" 
 

 
    // SIMULATE SOME TIME TO PROCESS FUNCTION 
 
    setTimeout(function() { 
 
     // This line is what resolves the deferred object 
 
     // and it triggers the .done to execute 
 
     deferred.resolve(test_data); 
 
    }, 2000) // AFTER 2 SECONDS IT WILL RETURN 
 
    
 
    return deferred.promise(); 
 
} 
 

 
calculate().done(function (result) { 
 
    alert(result) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2

einen einfachen Code Unter der Annahme.

Versuchen wie folgt aus: -

function calculate(callback) 
{ 
    var a = 1+2; 
    console.log(a); 
    //Don't forget to give the calculated value to the callback function 
    callback(a); //Once you are done do `callback()` 
} 

calculate(function(result) 
{ 
     alert(result); 
}); 
+0

Ich mag OPs Syntax ziemlich. Warum zeigen Sie uns nicht, wie ein Callback auch mit der '.done'-Syntax aufgerufen werden kann? – evolutionxbox

+0

@evolutionxbox Ich habe meinen Code nur wie oben beschrieben benutzt. Ich habe nie Callback mit '.done' Syntax verwendet. :( – Shrabanee

+1

Aw. Manchmal können Sie einen Rückruf nicht als Argument übergeben. In diesen Fällen wäre die '.done' Syntax nützlich. – evolutionxbox

3

kann Ihnen versprechen, stattdessen verwenden.

function calculate() { 
    return new Promise((resolve, reject) => { 
     var a = 1+2; 
      console.log(a); 
     resolve(a) 
     }) 
} 
calculate().then(function(res){ console.log(res)}) 
+0

Arbeitet nur mit AngularJS – Gopal00005

+1

Dieses würde mit einem ecmascript funktionieren 6. und würde in irgendeinem Zusammenhang arbeiten – Abiodun

Verwandte Themen