簡體   English   中英

如何將“回調金字塔”重構為基於承諾的版本

[英]How to refactor a “callback pyramid” into promise-based version

我目前正在努力了解如何重構我的代碼以使用promises / 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();
}); 

(done()是最后的回調):

那么我如何使用承諾來做到這一點? 最好不要改變功能簽名,(我遵循慣例將回調作為最后一個參數)。

我不確定為什么在你的代碼中調用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();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM