2017-03-02 51 views
0

希望你很好。节点js - 程序的整体结构

我需要你的帮助来理解如何在节点JS中逻辑地组织一个程序,以避免给定其异步属性(作为初学者..)重复代码。让我们举一个例子,让它更容易解释。 在mongo数据库中有一些数据(比如说名称列表)。名字的这个名单可以访问拜功能READDATA如下

function readData(criteriaRead,callback) { 
    mongodb.stuff(..) 
    callback('data read on mongodb') 
} 

我在我的节目两个动作:一个是打印出名字的名单,另一个是检查是否一个名字是在名单。 对于第一种情况,这很简单,我只是需要有一个像这样

function printout(data) {console.log(data)} 

函数,要做到这一点

readData(criteriaRead,printout) 

在第二种情况下,让我们说我有这样

功能
checkIfInIt(array,dataToCheck) {//stuff to check console.log(results)} 

现在,我有一个问题,因为如果我这样做readData(criteriaRead,checkIfInIt)为checkIfInIt需要两个参数,它不会工作。 我需要这样的

function readDataBis(criteriaRead,dataToCheck,callback) { 
    mongodb.stuff(..) 
    callback('data read on Mongodb','dataToCheck') 
} 

一个函数,然后readDataBis(criteriaRead,dataToCheck,checkIfInIt)的工作,但我有我的代码一个巨大的重复。

如何避免这种情况?

回答

0

没有关于此类问题的几种解决方案,但这里是一个容易为你的情况

与三个参数,例如

内声明的功能,检查是否dataToCheckundefined,并继续进行第二个功能的流程,如果是这样的话。 (否则,只是做读取功能)

打电话给他们,像这样

readData(callback, criteriaRead); // Third parameter missing, will be undefined 
readData(callback, criteriaRead, dataToCheck); 

你也可以传递一个对象的参数就是这样,如果它会更简单

function readData(callback, params) { ... 

而且这样的电话

readData(callback, { criteriaRead: criteriaRead, dataToCheck: dataToCheck }); 
+0

那么,你的第二个解决方案是完美的我的情况 - 尤其是因为我可以保持我的所有数据跨越d不同的回调。这太棒了,非常感谢 –

+0

我在晚上想到了这个。有可能对回调函数做同样的事情吗? –

+0

做同样的事情吗? –