[英]value of a function in JavaScript(protractor) returns as undefined
即時通訊使用量角器檢索文本。
功能之一是
//get the Impersonation ID
this.getUserSessionID = function(){
//get whole text
UserImpersonateTextElement.getText().then(function(text) {
var tempText = text;
var startString = 'session ID is ';
var sessionID = tempText.substring(tempText.lastIndexOf(startString)+startString.length,tempText.length);
console.log('sessionID is:'+sessionID);
return sessionID;
});
};
我在另一個js(我導入了上面的js)文件中調用了函數
var getUserImpersonationID = ImpersonationSuccessPage.getUserSessionID();
當我嘗試
console.log('User Impersonation ID is:'+getUserImpersonationID);
我得到未定義的值。
但是console.log('sessionID is:'+sessionID);
在功能中顯示正確的值。
誰能建議我在這里做錯了什么?
內部獲取文本的調用會返回一個承諾。 繼續並返回該承諾,然后可以在調用getUserSessionID的過程中鏈接a then
。 例
this.getUserSessionID = function(){
//get whole text
return UserImpersonateTextElement.getText().then(function(text) {
var tempText = text;
var startString = 'session ID is ';
var sessionID = tempText.substring(tempText.lastIndexOf(startString)+startString.length,tempText.length);
console.log('sessionID is:'+sessionID);
return sessionID;
});
};
在通話中,您需要執行以下操作:
getUserSessionID().then(function(sessionId){
console.log('You session ID is ',sessionId);
})
或者,由於Expect假設可以解決該承諾,因此您可以檢查ID是否包含Expect:
expect(this.getUserSessionID()).not.toBeNull();
您不從getUserSessionID
函數return
,而getUserSessionID
then
回調返回。 實際上,您不能返回值,因為您的函數是異步的。 您需要兌現承諾。
this.getUserSessionID = function(){
return UserImpersonateTextElement.getText().then(function(text) {
// ^^^^^^
var startString = 'session ID is ';
var sessionID = text.substring(text.lastIndexOf(startString)+startString.length, text.length);
console.log('sessionID is:'+sessionID);
return sessionID;
});
};
然后像這樣使用它:
var promise = ImpersonationSuccessPage.getUserSessionID();
promise.then(function(getUserImpersonationID) {
console.log('User Impersonation ID is:'+getUserImpersonationID);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.