我正在编写一个调度程序,该程序返回有关课程的JSON数据。一个星期前我刚刚开始Node.js,所以我不确定我是否正确。 我正试图找到更好的方式来编写此代码并避免回调地狱。我已经写了getJSON方法。Node.js回调操作检查
/*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)
})
我的主要问题是如果有什么办法可以使这段代码更短,更具可读性或更少回调hecky。
在我看来,回调是好的,直到他们不是,你在地狱。那时候是学习承诺的时候了,或者使用[bluebird](https://github.com/petkaantonov/bluebird),[async](https://github.com/caolan/async)或[Q ](https://github.com/kriskowal/q)等 – adeneo
是的,我完全同意。从同步思维模式(我主要是Java和PHP)转换到异步模式非常刺激和不自然,所以我试图通过自己编写回调来强制自己学习。虽然 –