2013-12-17 48 views
3

我目前struggeling真正理解如何重構我的代碼使用承諾/第q庫。如何重構一個「回調金字塔」爲基礎的承諾版本

考慮以下共同的基本例子:我有進口相同的文件兩次到MongoDB的,然後檢查第二進口數據集名稱是否得到了在最後的一些修改測試用例。

importDataSet('myFile.csv',function() { 
    importDataSet('myFile.csv',function() { 
    DataSet.find({title: 1}, function (err, result) { 
     result.length.should.be.equal(2); 
     result[0].title.should.startWith('myFile'); 
     result[1].title.should.startWith('myFile'); 
     result[0].title.should.not.be.equal(result[0].title); 
     done(); 
     }); 
    }); 
    }); 
    done(); 
}); 

(進行()是最後的回調):

那麼我將如何做到這一點使用的承諾? 優選地在不改變功能的簽名,(I遵循了約定有回調作爲最後一個參數)。

回答

1

我不知道爲什麼done()在代碼中調用了兩次,但不這樣做,它可能類似於:

importDataSet('myFile.csv') 
    .then(function() { 
    return importDataSet('myFile.csv') 
}).then(function() { 
    return DataSet.find({title: 1}) 
}).then(function (result) { 
    result.length.should.be.equal(2); 
    result[0].title.should.startWith('myFile'); 
    result[1].title.should.startWith('myFile'); 
    result[0].title.should.not.be.equal(result[0].title); 
    done(); 
}); 
+0

謝謝:)的確,呼籲做兩次是一個複製和粘貼錯誤從我身上。 –

+0

我認爲這是不恰當的一般編輯接受的答案。我們可以確定編輯是否有效。 – Strawberry