2016-02-22 45 views
1

比如我有一個具有返回一定的價值我應該在自定義函數中使用回調模式嗎?節點JS

function A(callback){ 
     //some computation 
     var fakeData = 20; 
     callback(null,fakeData) 
    } 
    function B(err,data){ 
     if(!err){ 
console.log(data); 
} 

    } 
A(B); 

所以據我所知在節點JS運行異步只有I/O操作,一個功能的有啥區別,如果我的權利只是這個

function A(){ 

      var fakeData = 20; 
      return fakeData; 
     } 
     function B(data){ 

    console.log(data); 

     } 
     var data = A(); 
     B(data); 

我的意思是他們兩個會同步運行嗎?

回答

0

如果你在談論這兩個函數,那麼是的這兩個是相同的 但這不是回調的用法,因爲當你有一個過程在一段時間之後或者將來像數據庫一樣返回結果時使用回調調用或休息API調用或文件讀/寫操作,我們不確定它們何時返回結果。

1

的回調格局是許多問題的類型有用:

  1. 當你的函數使用異步操作,你希望能夠通知主叫方時的異步操作都完成後,也許傳遞最終結果給調用者。

  2. 當你的函數想要調用者提供一些可用於計算結果的函數時,如可以傳遞給array.sort(callback)的回調函數。

您通常不會使用回調模式來傳遞同步操作的結果,因爲這會使代碼更加複雜,而不僅僅是直接從函數返回結果。因此,如果您在A()中的所有操作都是同步的,那麼您的第二個代碼選項將更易於編碼和使用。

+0

所以在這種情況下,我應該使用第二種方法不是第一個權利? – onik

+0

@ user2715191 - 如果'A()'中的所有代碼都是同步的,那麼只需從它返回值並跳過回調即可。這樣更簡單。是的,使用第二種方法。 – jfriend00

相關問題