2016-10-27 3 views
-2

In anderen Sprachen war ich gewohnt, Anweisungen in Reihenfolge wie 1,2,3 auszuführen. JS funktioniert nicht so. Ich brauche sehr einfachen JS-Code, um sicherzustellen, dass die Anweisungen 1,2,3 und nicht 2,1,3 einmal und 3,1,2 der nächste ausgeführt werden.Rückruf JS Code

+2

Schritt 1: zeigen Sie Ihren Code. Schritt 2: Erklären Sie das Problem mit dem Code. –

+0

Das könnte Sie interessieren: https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop. –

+2

Hallo, und willkommen bei StackOverflow! Wir würden uns freuen, Ihnen helfen zu können, aber vielleicht haben Sie nach dem Lesen der Hilfeartikel wie [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask), und [andere] (http://stackoverflow.com/help/asking). Aber froh, dass du hier bist, Dad. :) –

Antwort

1

JavaScript ist in der Reihenfolge ausgeführt.

function doSomething(x) { 
 
    console.log('did something', x); 
 
} 
 

 
console.log(1); 
 
console.log(2); 
 
console.log(3); 
 

 
doSomething(1); 
 
doSomething(2); 
 
doSomething(3);

+0

Ich entschuldige mich. Das spezielle Problem ist, dass Daten, die von Funktion 1 zurückgegeben werden, für Funktion 2 verfügbar sein müssen. Die Funktionen werden nacheinander ausgeführt - START in der Reihenfolge, aber nicht in der Reihenfolge. Function2 kann erst starten, wenn Funktion1 beendet ist. Es muss warten bis Funktion1 beendet ist. Hier kommt der Rückruf ins Spiel. –

+0

@LawrenceJohnson - Sie könnten in Betracht ziehen, [Versprechen] (https://developers.google.com/web/fundamentals/getting-started/primers/promises) zu prüfen. –

3

In anderen Sprachen wurde ich auf Anweisungen verwendet werden, um wie 1,2,3 ausgeführt. JS funktioniert nicht so.

Eigentlich funktioniert JavaScript genau so.

Klingt so, als ob Sie eine Funktion mit einem Callback aufrufen, um etwas asynchron zu tun. Lass uns ein Beispiel versuchen.

console.log('1'); 
doSomethingLater(function callback() { 
    // This is my callback code 
    console.log('3'); 
}); 
console.log('2'); 

wird der Ausgang 1, 2, 3 sein

Was, wenn Sie tun doSomethingLater ruft vorbei einen Verweis auf eine anonyme Funktion als Parameter. doSomethingLater wird diese Funktion nicht aufrufen, bis sie programmiert ist, was normalerweise einige Zeit später ist.

Wenn wir den Rückruf ignorieren, ist es sehr einfach zu sehen, dass die Dinge in der richtigen Reihenfolge ausgeführt werden.

console.log('1'); 
doSomethingLater(); 
console.log('2'); 

Diese drei Anweisungen werden in der richtigen Reihenfolge ausgeführt.

Um den Punkt weiter zu veranschaulichen, betrachten Sie ein Beispiel mit setTimeout(), wo wir nur anderen Code nach einer Sekunde ausführen. (Wenn Sie mit setTimeout() nicht vertraut sind, geht die zuerst nachschauen und dann hier wieder zum Lesen zu halten.)

console.log('1'); 
setTimeout(function() { 
    console.log('3'); 
}, 1000); 
console.log('2'); 

In diesem Beispiel wir versuchen nicht, den Rückruf, bis eine Sekunde nach setTimeout() auszuführen heißt also grundsätzlich eine Sekunde nach console.log('2');