我如何才能在then语句中返回一系列承诺
How can I return an array of promises in a then statement
所以在过去的几个小时里,我一直在研究异步技术和使用promise。我使用的是测试框架量角器,有一些异步的东西我遇到了麻烦。
在这个save函数中,我异步调用cm.org1.all(),并使用then来获取响应。我对响应进行循环,需要对响应中的每个元素调用getNewElement(),其中也有一个异步调用,因此每个元素都返回一个promise。
所以我有一组promise,但我不知道如何返回。cm.save()的返回值是[]。我需要它是['
下面的代码不起作用,但这就是我目前所拥有的。
var cm = companyManagement() {
//whatever is initialized below is initialized up here
this.save = function() {
cm.saveButton.click();
var elements;
var promises = [];
var defer = protractor.promise.defer();
cm.org1.all(by.repeater('brand in vm.brands'))
.then(function(response) {
//elements is of length 4
elements = response;
for(var i=0; i<elements.length;i++) {
promises.push(getNewElement(elements, i));
}
//defer.fulfill(promises); not correct?
});
return protractor.promise.all(promises); //not correct?
};
function getNewElement(elements, i) {
var defer = protractor.promise.defer();
var alias = elements[i].element(by.binding('brand.alias'));
alias.getText().then(function(aliasText) {
defer.fulfill('foo');
});
return defer.promise;
}
}
cm.save()
.then(function(response){
console.log("my new array is",response);
});
在测试中手动处理量角器承诺通常是问题过于复杂的迹象。Protractor
有各种各样的抽象和功能编程工具,涵盖了大多数用例。
如果你想使用中继器的.column()
:,你可以在一行中解决它
this.save = function() {
cm.saveButton.click();
return cm.org1.all(by.repeater('brand in vm.brands').column('brand.alias')).getText();
};
我会这么做,但如果列brand.alias与我拥有的某个常量匹配,我希望最终能够获得元素的父元素。如果我只有无法获取父级的别名文本,请更正我的错误。
filter()
和map()
救援:
cm.org1.all(by.repeater('brand in vm.brands').column('brand.alias')).filter(alias) {
return alias.getText().then(function (aliasText) {
return aliasText === "foo";
});
}).map(function (alias) {
return alias.element(by.xpath("..")).getText(); // getting the parent
});
尝试:
this.save = function() {
cm.saveButton.click();
var elements;
var promises = [];
var defer = protractor.promise.defer();
return cm.org1.all(by.repeater('brand in vm.brands'))
.then(function(response) {
//elements is of length 4
elements = response;
for(var i=0; i<elements.length;i++) {
promises.push(getNewElement(elements, i));
}
return protractor.promise.all(promises);
});
};
相关文章:
- jquery if语句返回return wong语句
- 函数在return语句之前返回空对象
- 将语句与jquery相结合,并使用媒体查询来实现返回页首按钮
- 多个if语句根据URL返回css值
- 阻止表单提交 javascript 为什么有一个明显的错误语句返回 true
- 如果语句返回错误答案
- 为什么 true == JS中的“true”语句返回false
- .post javascript with PHP 以启用 select 语句返回
- 是否可以仅在 if 语句返回 true 时才调用函数
- 为什么两个相同的语句返回不同的结果,只是用括号括住其中一个而不是另一个
- PHP/javascript中的Switch语句返回'未定义'
- 以下Javascript语句返回什么以及为什么返回
- 为什么我的函数if/else-if/else-if语句返回相同的答案
- if语句返回true,而不是遍历我的所有if语句-javascript
- 这个if语句返回空做什么在Bootstrap模式的源代码
- Import语句返回未定义的模块成员
- If/Else语句返回误报
- 如何从SQLite语句返回所选值
- 为什么我的if-else语句返回错误的结果
- 关于函数中if语句的问题是,如果if语句返回true,而函数返回false