2017-03-01 24 views
0

如何在不更改setTime的情況下使用回調來實現此代碼以正確的順序(A和B)運行?Javascript中的基本回調

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

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

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

c(); 

當運行c(),我需要在同步順序運行()和b(),這就是:

  1. 等待秒;
  2. 運行一個()函數...
  3. ...然後,運行B()函數
+1

誰做你的意思「沒有改變的時刻設定只使用回調?」? – guest271314

+2

這是*順序*,而不是「同步」。 'setTimeout'總是異步的。 – Bergi

回答

3

您使用回調提到的 - 只是一個參數添加到a()這是一個回調函數,你做console.log(a)後會調用,那麼當你調用a()傳遞一個參考b

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

a()檢查callback實際上是對功能的引用意味着您可以選擇不傳遞迴調,a()仍然可以工作。

+0

感謝您的澄清! –

1

異步操作(setTimeout()中正在執行的操作)在完成時需要調用回調。提供回調a()

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

然後通過該回調b參考:

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

偉大的大衛。非常感謝! –