Javascript 尝试使用q库来理解promise。然后在resolve上';好像不行

Javascript 尝试使用q库来理解promise。然后在resolve上';好像不行,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,NodeJS新手,尝试实现基于REST的身份验证,之后需要获取auth令牌以在后续请求中使用。尝试使用nodejs中的承诺(使用q库)来实现这一点 在身份验证完成之前,首先执行getData()函数,但我认为promise框架保证了这一点。我可能完全错了,希望能得到一些帮助 浏览所有的教程和文档,有这么多的实现风格,很难看出什么是正确的方法 var request = require("request"); var q = require('q'); var options = { metho

NodeJS新手,尝试实现基于REST的身份验证,之后需要获取auth令牌以在后续请求中使用。尝试使用nodejs中的承诺(使用q库)来实现这一点

在身份验证完成之前,首先执行getData()函数,但我认为promise框架保证了这一点。我可能完全错了,希望能得到一些帮助

浏览所有的教程和文档,有这么多的实现风格,很难看出什么是正确的方法

var request = require("request");
var q = require('q');

var options = { method: 'POST',
url: 'https://somewebsite.com:8080/auth',
headers:
    { 'postman-token': '33e52c21-22cf-1571-c082-3b612d62e5c1',
        'cache-control': 'no-cache',
        cookie: 'sails.sid=s%3AuBo1j-iEEd0IFanmW4eJ7HxKO6D8ZWVm.ViK%2Bx8koYIPdqnGyrkRAMrtb8lBR8Xry9f8CcfaEfVM',
        'accept-language': 'en-GB,en-US;q=0.8,en;q=0.6',
        'accept-encoding': 'gzip, deflate, br',
        referer: 'https://avrij.eyesover.com/',
        'content-type': 'application/json;charset=UTF-8',
        authorization: 'Bearer undefined',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        origin: 'somewebsite.com',
        accept: 'application/json, text/plain, */*' },
body: '{"username":"John","password":"*********"}' };

    var options1 = { method: 'GET',
      url: 'https://somewebsite.com:8080/getData',
      headers:
    { 'postman-token': 'dcc618ef-6382-95cd-dbce-49c8ac761589',
        'cache-control': 'no-cache',
        cookie: 'sails.sid=s%3AuBo1j-iEEd0IFanmW4eJ7HxKO6D8ZWVm.ViK%2Bx8koYIPdqnGyrkRAMrtb8lBR8Xry9f8CcfaEfVM',
        'accept-language': 'en-GB,en-US;q=0.8,en;q=0.6',
        'accept-encoding': 'gzip, deflate, sdch, br',
        referer: 'https://somewebsite.com/',
        authorization: 'Bearer ' + token,
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        origin: 'https://somewebsite.com',
        accept: 'application/json, text/plain, */*' } };

    var token = null;

    function authenticate() {

     var deferred = q.defer();

     request(options, function (error, response, body) {
     if (error) throw new Error(error);

       console.log("Authentication Done! - see response below")
       console.log(body)

       token = body.token;

       deferred.resolve(token);

      });

     return deferred.promise;
   }

   function getData(token){

     var deferred = q.defer();

     console.log("Here is the token we got " + token);
     console.log("Now that authenticated, lets get some data");

     request(options1, function (error, response, body) {
        if (error) throw new Error(error);


       console.log("Here is all the data received!")
       console.log(body);
       deferred.resolve();

      });
    return deferred.promise;

    }

    authenticate()
       .then( getData(token));
我得到的结果是:

    Here is the token we got null
    Now that authenticated, lets get some data
    Here is all the data received!
    {
      "err": "Invalid Token!"
    }
    Authentication Done! - see response below
   {
     "user": {
     "username": "John",
     "email": "info@info.com",
     "permissions": [
     "editSetup",
     "userManagement"
      ],
    "role": [
    "ROLE_LIMITED"
    ],
    "createdAt": "2017-01-12T01:18:29.403Z",
    "updatedAt": "2017-03-27T16:45:53.047Z",
    "id": "*********"
    },
    "token": "AKDL879ASD879ASD098DAS09cCI6IkpXVCJ9.eyJpZCI6IjU4NzZkOTY1ZmIzMTQwZDQwNDIwNGY2MiIsImlhdCI6MTQ5MTQASDADAS90899767ASD8TQwfQ.VC1suru9CCLz0VmlqwFrOwAS0980DA90S90S8DA0S"
    }

你在用。然后错了
.then(getData(token))
应该是
.then(getData)
-任何
.then
非函数的参数都被忽略。同样,如果您对我学习NodeJS和平均堆栈的在线课程有任何建议,我将不胜感激。对我来说,能够提出问题让我理解是很重要的,而不仅仅是在没有上下文的情况下看视频。@Jaromanda:谢谢。。这是我关于StackOverflow的第一篇文章,我很快就得到了回复。@Jaromanda如果我听从你的建议,我如何将令牌值传递给getData函数?顺便说一句,你不应该抛出新的错误(Error),您应该
延迟。拒绝(新错误(Error));返回