2016-01-13 46 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對象允許做這樣。