我目前正在努力真正理解如何重构代码以使用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();
});