量角器:在尝试返回值时获取未定义

时间:2016-07-08 09:04:47

标签: protractor undefined

我编写了一个发送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
有人可以帮忙吗?

3 个答案:

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