2016-01-13 61 views
0

让我们建议函数_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+'"]')); 
} 
+0

你是什么意思_诺言?返回承诺中的价值。如果有必要返回多个承诺... – marekful

回答

2

承诺是对象。 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; 
+0

这很好,它的工作,谢谢! 但是。如果我希望进一步通过HeaderPromise,该怎么办?我尝试用下一个模拟代码来描述: _headerCreate()。then(function(HeaderPromise){element(by.css('div'))。then(function(){console.log(HeaderPromise.header_name); })})_ _undefined_值将显示在控制台中。 –

+0

您必须手动将其添加到链的每个部分。另一种方法是将'Promise'和delegate转换为'then',然后诚实地说,在这一点上,你可能会像蓝鸟那样支持上下文并且不再支持上下文。 –

0

来解决这个问题最简单的方法是让代码更简单。 而不是

headerCreate().then(function(HeaderPromise){ 
element(by.css('div')).then(function(){ 
console.log(headerPromise.header_name); 
}); 
}); 

更好地写出:

​​

theControlFlow对象允许做这样。