量角器:尝试 return 值时变得不确定
Protractor: Getting undefined while trying to return a value
我编写了一个发送 GET 请求和 returns 响应的函数。
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
在调用函数中。
有人可以帮忙吗?
需要在回调函数中写打印响应逻辑,用于解析promise或者处理异步行为
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
});
});
});
我觉得你可以按照下面的方式来做;
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
的 return 一起使用。因为那个函数里面没有 return 。您需要承诺 (protractor.promise
) 以便在其中使用 then。然后,您可以使用 .then
和 generateToken 函数。
您需要创建一个承诺并解决一次才能收到响应。
看下面的代码。
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.
};
现在您可以在您的任何测试中调用 generateToken() 方法,该方法将 return 只有在从 API 调用收到响应时才解析的承诺。
it('Post a GET request and generate a response', function () {
var response = commonFunctionObj.generateToken();
response.then(function(value){
console.log(value);
});
});
我编写了一个发送 GET 请求和 returns 响应的函数。
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
在调用函数中。
有人可以帮忙吗?
需要在回调函数中写打印响应逻辑,用于解析promise或者处理异步行为
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
});
});
});
我觉得你可以按照下面的方式来做;
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
的 return 一起使用。因为那个函数里面没有 return 。您需要承诺 (protractor.promise
) 以便在其中使用 then。然后,您可以使用 .then
和 generateToken 函数。
您需要创建一个承诺并解决一次才能收到响应。 看下面的代码。
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.
};
现在您可以在您的任何测试中调用 generateToken() 方法,该方法将 return 只有在从 API 调用收到响应时才解析的承诺。
it('Post a GET request and generate a response', function () {
var response = commonFunctionObj.generateToken();
response.then(function(value){
console.log(value);
});
});