我正在開發一個系統,以將有FreeUnit的志願者(免費的時間段)與WorkUnits(需要X個志願者的次數的時間段)相匹配。以異步代碼排序
我希望實現的算法是通過可能的FreeUnits(WorkUnit.time == FreeUnit.time)升序對WorkUnits進行排序,並按順序將它們與FreeUnits匹配 - 我想填充最難填充的WorkUnits。
爲了實現這一點,我的WorkUnit模型有方法possibleFreeUnit,它返回可用於此WorkUnit的FreeUnit列表。
possibleFreeUnit: function(next) {
var freeUnits = Array();
FreeUnit.find()
.populate("owner")
.where({slot: this.slot})
.exec(function(err, units){
next(units);
});
}
我使用可能FreeUnits的#我的排序功能,它通過可能FreeUnits上升的的訂單任務包。
WorkUnit.find()
.populate("owner")
.then(function(workunits) {
sails.log("before sort");
workunits.sort(function(a, b){
a.possibleFreeUnit(function (aFreeUnits){
b.possibleFreeUnit(function (bFreeUnits){
sails.log(a.toString() + ": " + aFreeUnits.length +
" vs " + b.toString() + ": " + bFreeUnits.length);
return aFreeUnits.length - bFreeUnits.length;
});
});
});
workunits.forEach(function(workunit){
sails.log(workunit.toString());
//this code should iterate over them in # possibleFreeUnits ascending
});
});
問題是在遍歷每個工作單元之後運行排序,因爲我的排序函數是異步的。
克服這個問題的最好方法是什麼?我曾嘗試使用setTimeout,但即使延遲後,工作單元也未顯示排序。我想知道這是否是一個很好的承諾用例。非常感謝!
是不是你的'.sort('回調信號表明它已完成? – 2014-12-02 02:35:35