我正在編寫一個調度程序,該程序返回有關課程的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)轉換到異步模式非常刺激和不自然,所以我試圖通過自己編寫回調來強制自己學習。雖然 –