JavaScript(量角器)中函数的值返回为undefined

时间:2015-04-14 17:40:06

标签: javascript protractor

我正在使用量角器来检索文本。

其中一项功能是

//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);显示正确的值。

有谁能建议我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

获取文本的内部调用返回一个promise。继续并返回该承诺,然后您可以在调用getUserSessionID时链接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);
})

或者,因为期望是为了解决该承诺,您可以检查您是否具有期望的ID:

expect(this.getUserSessionID()).not.toBeNull();

答案 1 :(得分:2)

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);
});