2016-02-22 41 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

相关问题