所以在过去的几个小时里,我一直在研究异步的东西和使用承诺。我使用的是测试框架量角器,有几个异步问题我遇到了麻烦。
在这个save函数中,我异步调用cm.org1.all(),并使用then获取响应。我循环了响应,需要对响应中的每个元素调用getNewElement(),其中也有一个异步调用,因此每个元素都返回一个承诺。
所以我有这一系列的承诺,但我不知道如何回报。cm.save()的返回值为[]。我需要它是['foo',foo',foo',foo']
下面的代码不起作用,但它是我目前所拥有的。
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);
});
尝试:
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);
});
};
在测试中手动处理量角器承诺通常是使问题过于复杂的标志。protractor
有多种抽象和函数式编程工具,覆盖了大多数用例。
如果您使用repeater的.column()
,您可以在一行中解决这个问题:
this.save = function() {
cm.saveButton.click();
return cm.org1.all(by.repeater('brand in vm.brands').column('brand.alias')).getText();
};
我会这样做,但我希望最终能够获得元素的父元素,如果列brand.alias与我拥有的某个常数匹配。如果我只有别名文本,我不能得到父,纠正我,如果我是错的。
筛选器()
和映射()
到救援:
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
});
问题内容: 我刚刚学习(正在学习)函数参数在Python中的工作方式,并且在没有明显原因的情况下开始进行实验: 给出了输出: 哪里来的?还有,这是什么? 问题答案: 它是函数的返回值,您可以将其打印出来。如果没有语句(或者只是没有参数的),则将隐式添加到函数的末尾。 您可能想返回函数中的值,而不是打印它们:
问题内容: 关于这两个重要来源:NZakas- 承诺链中的归还承诺 和MDN承诺,我想提出以下问题: 每次我们从承诺履行处理程序返回值时,该值如何传递给从同一处理程序返回的新承诺? 例如, 在这个例子中,是一个承诺。也是来自履行处理程序的承诺。但是。取而代之的是神奇地解决(如何?),然后将该值传递给的实现处理程序。即使是这里的句子也令人困惑。 您能给我解释一下这到底是怎么回事吗?我对这个概念感到困
我正在努力返回嵌套在函数中的一个promise(或多个promise),该函数嵌套在函数中。 我认为最好通过查看代码来缠绕你的头,所以这里是:
问题内容: 我正在寻找编写一个PostgreSQL查询来执行以下操作: 我已经试过这个查询,但是没有用 谢谢你 问题答案: 如PostgreSQL的文档中阐明在这里: SQL CASE表达式是通用条件表达式,类似于其他编程语言中的if / else语句。 专门回答您的问题的代码段:
问题内容: 这是问题的简化:我有一个看起来像这样的选择: 并返回的数据快照看起来像这样 我想做的是,如果工作组是内部的,则选择不显示受让人的名称。而是显示工作流。 因此,例如,我想要实现的结果将是这样的: 我希望这是有道理的?基本上是一个条件选择,可以检测某个列是否包含某个值,然后用[whatever]替换另一个列的值。 提前致谢! 编辑我想实现这样的事情: 问题答案: 您没有提到您的DBMS,但
这是我的代码行,我得到一条警告:“函数返回non void时没有返回语句警告”,我将total声明为:static int total; 有什么建议我如何摆脱警告?