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