2016-07-08 40 views
0

我寫了一個函數,它發送GET請求並返回響應。量角器:嘗試返回值時出現undefined

this.generateToken = function() { 
    var options = { 
     uri: 'http://localhost:10000/token', 
     method: 'GET', 
     headers: { 
     'Authorization': "YWRtaW46YWRtaW4=" 
     }, 
    }; 
    request(options, function (error, response, body) { 
     var messageresponse = response.body.toString(); 
     console.log(messageresponse); //I am able to print the response 
     return messageresponse; 
    }); 
}; 

我能夠在request()中打印'messageresponse'變量的值。
此功能正從我的測試的一個叫:

it('Post a GET request and generate a response', function() { 
    var response = commonFunctionObj.generateToken(); 
    response.then(function(value){  //Getting below mentioned error on this line 
     console.log(value); 
    }); 
}); 

四處錯誤:在格蘭調用函數TypeError: Cannot read property 'then' of undefined
有人可以幫忙嗎?

回答

2

您需要創建一個承諾並解決它一次以接收響應。 看看下面的代碼。現在

this.generateToken = function() { 
var deffered = protractor.promise.defer(); //create a promise 
var options = { 
    uri: 'http://localhost:10000/token', 
    method: 'GET', 
    headers: { 
    'Authorization': "YWRtaW46YWRtaW4=" 
    }, 
}; 
    request(options, function (error, response, body) { 
    var messageresponse = response.body.toString(); 
    console.log(messageresponse); 
    deffered.fulfill(messageresponse); //Instead of returning the response message, fulfill the promise that we created early. 
    }); 

return deffered.promise; //return the created promise. 
}; 

你可以調用內部的任何測試的,將返回只有當響應從API調用收到它解決了諾言的generateToken()方法。

it('Post a GET request and generate a response', function() { 
    var response = commonFunctionObj.generateToken(); 
    response.then(function(value){ 
    console.log(value); 
    }); 
}); 
+0

謝謝Sudharsan。 – Praveen

-1

你需要寫的回調函數,這是解決的承諾或處理異步行爲

Code Snippet: 

    it('Post a GET request and generate a response', function() { 
     var response = commonFunctionObj.generateToken(function(err,res){ 
          res.then(function(value){ 
           console.log(value); //or return value 
         }); 
       }); 
    }); 
+0

謝謝你的答案蘇雷什。 它甚至沒有執行該行「console.log(value);」 雖然沒有給出任何錯誤。 – Praveen

+0

@Praveen,我已經更新了回調函數語法。你可以嘗試一次嗎? –

+0

在generateToken函數中沒有回調參數。你怎麼認爲這有用? –

0

我認爲你可以如下做到這一點的打印響應邏輯;

this.generateToken = function() { 
    var deferred = protractor.promise.defer(); 

    var options = { 
    uri: 'http://localhost:10000/token', 
    method: 'GET', 
    headers: { 
    'Authorization': "YWRtaW46YWRtaW4=" 
    }, 
    }; 
    request(options, function (error, response, body) { 
    var messageresponse = response.body.toString(); 

    deferred.fulfill(messageresponse); 
    }); 

    return deferred.promise; 
}; 


it('Post a GET request and generate a response', function() { 
    var response = commonFunctionObj.generateToken(); 
    response.then(function(value){  //Getting below mentioned error on this line 
     console.log(value); 
    }); 
}); 

說明;

您不能使用.thengenerateToken的回報。因爲該函數內部沒有返回。你需要做出承諾(protractor.promise),然後在裏面使用。然後,您可以使用.then和generateToken函數。

+0

它提供的錯誤:「TypeError:deferred.resolve不是一個函數」在行'deferred.resolve(messageresponse);' – Praveen

+0

deferred.fulfill而不是'resolve'起作用。不管怎樣,謝謝你的回覆阿里。 – Praveen

相關問題