Javascript 异步函数不返回json对象 公共异步validateToken(req,res):承诺{ const token=req.headers.authorization.split(“”[1]| | req.params.token; 等待这个.redisClient.SISMEMBER(“tokenBlackListSet”、token、函数( 犯错误 数据 ) { 如果(data){//这里我得到data=1,因为tokenBlackListSet中存在token return{//,所以应该以json的形式返回 现状:400, 错误:“无效令牌” }; } }); } //在其他异步函数中 const response=等待验证(req,res); console.log(response)//返回值始终未定义
创建一个Javascript 异步函数不返回json对象 公共异步validateToken(req,res):承诺{ const token=req.headers.authorization.split(“”[1]| | req.params.token; 等待这个.redisClient.SISMEMBER(“tokenBlackListSet”、token、函数( 犯错误 数据 ) { 如果(data){//这里我得到data=1,因为tokenBlackListSet中存在token return{//,所以应该以json的形式返回 现状:400, 错误:“无效令牌” }; } }); } //在其他异步函数中 const response=等待验证(req,res); console.log(response)//返回值始终未定义,javascript,node.js,redis,Javascript,Node.js,Redis,创建一个Promise对象,并从回调内部解析它 public async validateToken(req, res): Promise<any> { const token = req.headers.authorization.split(" ")[1] || req.params.token; await this.redisClient.SISMEMBER("tokenBlackListSet", token, function( err,
Promise
对象,并从回调内部解析它
public async validateToken(req, res): Promise<any> {
const token = req.headers.authorization.split(" ")[1] || req.params.token;
await this.redisClient.SISMEMBER("tokenBlackListSet", token, function(
err,
data
) {
if (data) { // here i get data=1 as token is present in tokenBlackListSet
return { // so this should be returned as json
status: 400,
error: "Invalid Token"
};
}
});
}
// in other async function
const response = await validateToken(req,res);
console.log(response) // returned value is always undefined
公共异步validateToken(req,res):承诺{
让我们重新调用,重新调用
const returnPromise=新承诺((解决、拒绝)=>{
重新调用=解析
refCallback=拒绝
})
const token=req.headers.authorization.split(“”[1]| | req.params.token;
等待这个.redisClient.SISMEMBER(“tokenBlackListSet”、token、函数(
犯错误
数据
) {
如果(data){//这里我得到data=1,因为tokenBlackListSet中存在token
resCallback({//),所以这应该作为json返回
现状:400,
错误:“无效令牌”
});
}
});
回报承诺
}
创建一个
Promise
对象,并从回调内部解析它
public async validateToken(req, res): Promise<any> {
const token = req.headers.authorization.split(" ")[1] || req.params.token;
await this.redisClient.SISMEMBER("tokenBlackListSet", token, function(
err,
data
) {
if (data) { // here i get data=1 as token is present in tokenBlackListSet
return { // so this should be returned as json
status: 400,
error: "Invalid Token"
};
}
});
}
// in other async function
const response = await validateToken(req,res);
console.log(response) // returned value is always undefined
公共异步validateToken(req,res):承诺{
让我们重新调用,重新调用
const returnPromise=新承诺((解决、拒绝)=>{
重新调用=解析
refCallback=拒绝
})
const token=req.headers.authorization.split(“”[1]| | req.params.token;
等待这个.redisClient.SISMEMBER(“tokenBlackListSet”、token、函数(
犯错误
数据
) {
如果(data){//这里我得到data=1,因为tokenBlackListSet中存在token
resCallback({//),所以这应该作为json返回
现状:400,
错误:“无效令牌”
});
}
});
回报承诺
}
希望这能奏效
public async validateToken(req, res): Promise<any> {
let resCallback, rejCallback
const returnPromise = new Promise((resolve, reject) => {
resCallback = resolve
refCallback = reject
})
const token = req.headers.authorization.split(" ")[1] || req.params.token;
await this.redisClient.SISMEMBER("tokenBlackListSet", token, function(
err,
data
) {
if (data) { // here i get data=1 as token is present in tokenBlackListSet
resCallback({ // so this should be returned as json
status: 400,
error: "Invalid Token"
});
}
});
return retPromise
}
公共异步validateToken(req,res):承诺{
const token=req.headers.authorization.split(“”[1]| | req.params.token;
return wait this.redisClient.SISMEMBER(“tokenBlackListSet”,token,(err,data)=>{
if(err){抛出新错误(err)}
否则返回{状态:400,错误:“无效令牌”};
}
});
}
希望这能奏效
public async validateToken(req, res): Promise<any> {
let resCallback, rejCallback
const returnPromise = new Promise((resolve, reject) => {
resCallback = resolve
refCallback = reject
})
const token = req.headers.authorization.split(" ")[1] || req.params.token;
await this.redisClient.SISMEMBER("tokenBlackListSet", token, function(
err,
data
) {
if (data) { // here i get data=1 as token is present in tokenBlackListSet
resCallback({ // so this should be returned as json
status: 400,
error: "Invalid Token"
});
}
});
return retPromise
}
公共异步validateToken(req,res):承诺{
const token=req.headers.authorization.split(“”[1]| | req.params.token;
return wait this.redisClient.SISMEMBER(“tokenBlackListSet”,token,(err,data)=>{
if(err){抛出新错误(err)}
否则返回{状态:400,错误:“无效令牌”};
}
});
}
由于
SISMEMBER
方法返回的是布尔值,而不是回调返回的值,因此可以返回在回调中解析的新承诺:
public async validateToken(req, res): Promise<any> {
const token = req.headers.authorization.split(" ")[1] || req.params.token;
return await this.redisClient.SISMEMBER("tokenBlackListSet", token, (err,data)=> {
if (err) { throw new Error(err) }
else return { status: 400,error: "Invalid Token"};
}
});
}
公共异步validateToken(req,res):承诺{
const token=req.headers.authorization.split(“”[1]| | req.params.token;
returnnewpromise(函数(resolve,reject){//这里我创建了一个新的Promise,它将在调用回调时解析(或拒绝)
this.redisClient.SISMEMBER(“tokenBlackListSet”),token,函数(
犯错误
数据
) {
如果有错误,我们拒绝承诺
拒绝(错误);
}
否则,如果(data){//如果您有一些数据,承诺将与对象解析
决心({
现状:400,
错误:“无效令牌”
});
}
});
}
}
请注意,我删除了
wait
,因为它现在与我们已经返回承诺的事实是多余的。因为SISMEMBER
方法返回的是布尔值,而不是回调返回的值,所以您可以返回在回调中解析的新承诺:
public async validateToken(req, res): Promise<any> {
const token = req.headers.authorization.split(" ")[1] || req.params.token;
return await this.redisClient.SISMEMBER("tokenBlackListSet", token, (err,data)=> {
if (err) { throw new Error(err) }
else return { status: 400,error: "Invalid Token"};
}
});
}
公共异步validateToken(req,res):承诺{
const token=req.headers.authorization.split(“”[1]| | req.params.token;
returnnewpromise(函数(resolve,reject){//这里我创建了一个新的Promise,它将在调用回调时解析(或拒绝)
this.redisClient.SISMEMBER(“tokenBlackListSet”),token,函数(
犯错误
数据
) {
如果有错误,我们拒绝承诺
拒绝(错误);
}
否则,如果(data){//如果您有一些数据,承诺将与对象解析
决心({
现状:400,
错误:“无效令牌”
});
}
});
}
}
请注意,我删除了
wait
,因为它现在与我们已经返回承诺的事实是多余的。我认为this.redisClient.SISMEMBER
不会将您的回调结果包装为承诺。如果是这样的话,您不会在这里提问
此时,由于回调结果没有作为返回值传递,因此您的结果将丢失在void中
将函数包装为承诺,并在库调用回调时解析或拒绝它:
public async validateToken(req, res): Promise<any> {
const token = req.headers.authorization.split(" ")[1] || req.params.token;
return new Promise(function (resolve, reject) { // Here I create a new Promise that will resolve (or reject) when your callback is called
this.redisClient.SISMEMBER("tokenBlackListSet", token, function(
err,
data
) {
if (err) { // If there is an error, we reject the promise
reject(err);
}
else if (data) { // If you have some data, the promise will resolve with the object
resolve({
status: 400,
error: "Invalid Token"
});
}
});
}
}
Wait getSISMember()
现在应该会出错或给您JSON响应我认为this.redisClient.SISMEMBER
不会将您的回调结果包装为承诺。如果是这样的话,您就不会在这里提问了
此时,由于回调结果没有作为返回值传递,因此您的结果将丢失在void中
将函数包装为承诺,并在库调用回调时解析或拒绝它:
public async validateToken(req, res): Promise<any> {
const token = req.headers.authorization.split(" ")[1] || req.params.token;
return new Promise(function (resolve, reject) { // Here I create a new Promise that will resolve (or reject) when your callback is called
this.redisClient.SISMEMBER("tokenBlackListSet", token, function(
err,
data
) {
if (err) { // If there is an error, we reject the promise
reject(err);
}
else if (data) { // If you have some data, the promise will resolve with the object
resolve({
status: 400,
error: "Invalid Token"
});
}
});
}
}
Wait getSISMember()
现在应该会出错或给您JSON响应validateToken
没有返回
语句如果我想从redisClient返回怎么办。SISMEMBER的回调函数然后您需要返回在回调中解析的承诺(在resolve方法调用中使用您的对象作为参数)我按照您的建议进行了更改,但仍然无法重新运行