繁体   English   中英

如何从具有错误处理回调的 function 访问返回值

[英]How to access the return value from a function that has an error handling callback

I have a function that should return data or throw an error from JSON web token custom function, the data returned from the signer part of the function does not get assigned to the token const instead return undefined I am using typescript

请问如何将签名者返回的数据分配给我的令牌 const

import jwt from 'jsonwebtoken';
import ms from 'ms';

const expiresAt = ms(process.env.WEB_TOKEN_EXPIRATION_TIME as string);
const signer = async (payload: string | object | Buffer) => {
  console.log({ expiresAt });
  const jsonSecretToken = process.env.JWT_SECRET_TOKEN as string;
  const token = await jwt.sign(
    payload,
    jsonSecretToken,
    {
      expiresIn: expiresAt,
    },
    (err, data) => {
      if (err) throw new Error();
      console,log(data) // return "shows a valid token"
      return data;
    }
  );
  console.log({ token }); // return undefined
  return token;
};

const decoder = async (token: string) => {
  const jsonSecretToken = process.env.JWT_SECRET_TOKEN as string;
  const decoded = await jwt.verify(token, jsonSecretToken, (err, data) => {
    if (err) {
      throw new Error();
    }
    return data;
  });
  return decoded;
};

const tokenGenerator = Object.freeze({ signer, decoder });

export default tokenGenerator;


那么您可以访问数据的唯一方法是在回调中访问它。 因为代码是异步的。 您可以让您的 function 接受回调并调用它。

使用异步代码的另一种方法是使用 Promises。 您可以将 function 调用包装到 promise 中,并在获取数据时解决它,或者在出现错误时拒绝它。

下一步是使用 async await 语法以类似于同步代码的方式处理 Promise

我认为当您异步签名时,您需要提供回调 function ,如此处的示例所示。 https://www.npmjs.com/package/jsonwebtoken

 //https://www.npmjs.com/package/jsonwebtoken jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' }, function(err, token) { console.log(token); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM