2017-03-01 4 views
0

Wie kann ich diesen Code implementieren, um in der korrekten Reihenfolge (A und B) zu laufen, ohne die setTime nur mit Rückruf zu ändern?Grundlegender Rückruf in Javascript

function a() { 
    setTimeout(function() { 
    console.log('a'); 
    },1000); 
} 

function b() { 
    console.log('b'); 
} 

function c() { 
    a(); 
    b(); 
} 

c(); 

wenn die C-Run(), ich brauche A() und B() in synchronen laufen, um, das ist:

  1. eine Sekunde warten;
  2. run a() Funktion ...
  3. ... und dann laufen b() Funktion
+1

Wen Sie meinen damit „die setTime ohne Änderung mit nur Rückruf?“? – guest271314

+2

Das ist * sequentiell *, nicht "synchron". 'setTimeout' ist immer asynchron. – Bergi

Antwort

3

Sie erwähnten einen Rückruf verwenden - einfach ein Argument a() hinzufügen, dass eine Funktion, die Sie Rückruf ist, dass rufen wird nach dem console.log(a) tun, dann, wenn Sie a() rufen Sie einen Verweis auf b passieren:

function a(callback) { 
 
    setTimeout(function() { 
 
    console.log('a'); 
 
    if (typeof callback === 'function') 
 
     callback(); 
 
    },1000); 
 
} 
 

 
function b() { 
 
    console.log('b'); 
 
} 
 

 
a(b); // note: no parentheses after b, i.e., a(b), *not* a(b()) 
 
a(); // note: a() still works without any argument

Der Test innerhalb a() zu überprüfen, dass callback tatsächlich eine Referenz auf eine Funktion ist, bedeutet, dass Sie wählen können, einen Rückruf nicht zu übergeben und a() wird immer noch funktionieren.

+0

Danke klar zu sein! –

1

Der asynchrone Betrieb (was in setTimeout() getan wird) würde einen Rückruf benötigen aufzurufen, wenn es fertig ist. Vorsehen, dass Rückruf a():

function a(callback) { 
    setTimeout(function() { 
    console.log('a'); 
    if (typeof callback === "function") { 
     callback(); 
    } 
    },1000); 
} 

Dann für diesen Rückruf einen Verweis auf b passieren:

function c() { 
    a(b); 
} 
+0

Großer David. Vielen Dank! –

Verwandte Themen