Node.js回调操作检查

时间:2015-12-22 02:52:15

标签: javascript node.js asynchronous

我正在编写一个调度程序,它返回有关课程的JSON数据。我刚刚在一周前创建了Node.js,所以我不确定我是否正确思考。 我试图找到一种更好的方法来编写这段代码并避免回调地狱。我已经编写了getJSON方法。

/*getJSON(course-name, callback(JSONretrieved)): gets JSON info about name and
takes in a callback to manipulate retrieved JSON data*/

现在我想从课程数组中获取多个课程名称,并检查它们之间的时间冲突。然后,我将所有可行的组合添加到答案数组中。我目前的想法是:

/*courseArray: array of classes to be compared
answers: array of all nonconflicting classes*/
var courseArray = ['MATH-123','CHEM-123']
var answers=[]
getJSON(courseArray[0],function(class1data){
    getJSON(courseArray[1],function(class2data){
         if(noConflict) answers.push( merge(class1data,class2data))
     })
    )
  })
);

最后,为了访问答案数组,我们从上面包装了整个代码:

function getAnswers(cb){
    /*courseArray: array of classes to be compared
answers: array of all nonconflicting classes*/
var courseArray = ['MATH-123','CHEM-123']
var answers=[]
getJSON(courseArray[0],function(class1data){
    getJSON(courseArray[1],function(class2data){
         /check for time conflicts between class1data and class2 data
         if(noConflict(class1data,class2data)) answers.push( merge(class1data,class2data))
     })
    )
  })
);
cb(answers)
}

我们调用函数

getAnswers(function(ans){
  //do processing of answers
  console.log(ans)
})

我的主要问题是,是否有任何方法可以使这些代码更短,更易读或更少回调。

1 个答案:

答案 0 :(得分:0)

您可以使用promise库让自己更轻松。如果用户选择多个课程进行比较,那么你的方式很快就会失控。

使用async之类的内容,您可以对getJSON进行parallel次调用,并且conflict代码将在所有getJSON内的单个回调中运行电话已经退回。对于大型课程,您的代码将更具可读性和可维护性。