【发布时间】:2014-05-16 21:18:27
【问题描述】:
我是 Promise 的新手,我不确定我是否正确使用它们。我正在尝试用一些承诺进行计算,所以我将一堆函数链接在一起。首先,我像下面这样编写它,它有效,但似乎不是好的代码。
it('should verify CPC column', function() {
ptor.findElements(protractor.By.className('aggRow')).then(function(promCells) {
getAggCellColumn('CPC').then(function(promColCPC) {
getAggCellColumn('Spend').then(function(promColSpend) {
getAggCellColumn('Clicks').then(function(promColClicks) {
promCells[promColCPC].getText().then(function(promStringCPC) {
promCells[promColSpend].getText().then(function(promStringSpend) {
promCells[promColClicks].getText().then(function(promStringClicks) {
var floatCPC = parseFloat(promStringCPC);
var floatSpend = parseFloat(promStringSpend);
var floatClicks = parseFloat(promStringClicks);
var result = Math.round((floatSpend / floatClicks) * 100) / 100;
expect(floatCPC).toEqual(result);
});
});
});
});
});
});
});
});
我对 Promise 进行了更多研究并得出以下结论:
it('should verify CPC column', function() {
ptor.findElements(protractor.By.className('aggRow'))
.then(getAggCellColumn('CPC'))
.then(getAggCellColumn('Spend'))
.then(getAggCellColumn('Clicks'))
.then(promCells[promColCPC + 2].getText())
.then(promCells[promColSpend + 2].getText())
.then(promCells[promColClicks + 2].getText())
.then(function(promStringClicks) {
var floatCPC = parseFloat(promStringCPC);
var floatSpend = parseFloat(promStringSpend);
var floatClicks = parseFloat(promStringClicks);
var result = Math.round((floatSpend / floatClicks) * 100) / 100;
expect(floatCPC).toEqual(result);
});
});
这不起作用,但我试图让 findElements 的结果成为 promCells。我还想参考 getText() 函数的结果。请让我知道我是否应该以不同的方式处理这个问题。谢谢!
我也想过这样写……
it('should verify CPC column', function() {
ptor.findElements(protractor.By.className('aggRow'))
.then(function(promStringClicks) {
var floatCPC = parseFloat(promCells[getAggCellColumn('CPC') + 2].getText());
var floatSpend = parseFloat(promCells[getAggCellColumn('Spend') + 2].getText());
var floatClicks = parseFloat(promCells[getAggCellColumn('Clicks') + 2].getText());
var result = Math.round((floatSpend / floatClicks) * 100) / 100;
expect(floatCPC).toEqual(result);
});
});
【问题讨论】:
-
getAggCellColumn和getText是否异步?
标签: javascript angularjs asynchronous promise protractor