我编写了一个发送GET请求并返回响应的函数。
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;
});
};
我能够打印出#message; 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
。
有人可以帮忙吗?
答案 0 :(得分:2)
您需要创建一个承诺并解决一次以接收回复。 请看下面的代码。
localStorage
现在,您可以在任何测试中调用generateToken()方法,该方法将返回仅在从API调用接收到响应时解析的promise。
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.
};
答案 1 :(得分: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);
});
});
<强>解释强>
您不能在.then
返回时使用generateToken
。因为该功能内部没有返回。您需要在其中使用承诺(protractor.promise
)。然后,您可以将.then
与generateToken函数一起使用。
答案 2 :(得分:-1)
你需要在回调函数中编写打印响应逻辑,这是解决promises或处理异步行为
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
});
});
});