如何在量角器框架中返回值和承诺
让我们建议函数_headerSave()保存到DB一些文本标题。我们需要知道标题和操作相应的承诺。 我们该怎么做?如何在量角器框架中返回值和承诺
错误代码例如:
header = headerCreate(); //header is the promise but real header needed
function headerCreate(){
var header_name = "Random Header Created";
return _headerSave(header_name); //return promise
}
function _headerSave(header_name){
element(by.css('button[ng-click="HeaderEditCtrl.saveHeader(true)"]')).click().then(function() {
element.all(by.repeater('button in modal.buttons')).get(1).click(); //press Save
browser.driver.wait(function(){
return element(by.css('table[class="grid-table"] span[title="'+header_name+'"]')).isPresent();
}, 5000);
});
return element(by.css('table[class="grid-table"] span[title="'+header_name+'"]'));
}
承诺是对象。 JavaScript中的对象可以具有属性。您可以动态添加这些属性。
function _headerSave(header_name){
// ...
var p = element(by.css('table[class="grid-table"] span[title="'+header_name+'"]'));
p.header_name = header_name;
return p;
}
用法:
_headerSave(header_name).header_name;
这很好,它的工作,谢谢! 但是。如果我希望进一步通过HeaderPromise,该怎么办?我尝试用下一个模拟代码来描述: _headerCreate()。then(function(HeaderPromise){element(by.css('div'))。then(function(){console.log(HeaderPromise.header_name); })})_ _undefined_值将显示在控制台中。 –
您必须手动将其添加到链的每个部分。另一种方法是将'Promise'和delegate转换为'then',然后诚实地说,在这一点上,你可能会像蓝鸟那样支持上下文并且不再支持上下文。 –
来解决这个问题最简单的方法是让代码更简单。 而不是
headerCreate().then(function(HeaderPromise){
element(by.css('div')).then(function(){
console.log(headerPromise.header_name);
});
});
更好地写出:
theControlFlow对象允许做这样。
你是什么意思_诺言?返回承诺中的价值。如果有必要返回多个承诺... – marekful