小编Rub*_*edo的帖子

使用react-router处理401未经授权的代码

我用一个函数包装一些组件来处理错误,我们称之为:wrapError

这里有一些重要的要点:

  • 一些组件调用端点来获取信息。
  • 我正在使用反应路由器

一切正常,但这里有一个边缘情况:

当用户的访问令牌过期时,用户可以单击并转到另一个页面(组件),新组件将尝试调用其端点,然后由于令牌无效,我们将收到 401 错误,最后记住我们有wrapError可以处理此代码错误的。

这个错误是通过使用push(推送到 401 页面错误)来处理的,react-router但它push是异步的,因此组件上的代码暂时会继续运行,并在控制台中提示错误。

你知道如何停止流量并重定向到 401 屏幕吗?

function wrapError(callback, errorCode = 401) {
  return callback.catch(e => {
    if (errorCode === error.statusCode) {
      // delete access token

      history.push("/my401page");
... etc 
Run Code Online (Sandbox Code Playgroud)

错误是:

TypeError: Cannot read property 'variable' of undefined...
Run Code Online (Sandbox Code Playgroud)

因为在那一刻端点返回了undefined

javascript ecmascript-6 reactjs react-router

5
推荐指数
1
解决办法
2092
查看次数

异步减少返回承诺

我有一组对象,我必须在来自 async 函数的每个对象上添加一个属性

我正在做一个 Array.reduce 来迭代每个元素并只返回一个结果:一个具有新属性的对象数组。

我有这个

const res = await resultOne.reduce(async (users = [], user, i) => {
          let userName;
          try {
            let { name } = await names.getNames(user.id);
            userName = name;
          } catch (error) {
            throw error;
          }
          delete user.id;
          users.push({ ...user, userName });
          return users;
      }, []);
Run Code Online (Sandbox Code Playgroud)

但我收到消息

推送不是用户的功能

这是因为我认为是一个承诺。

我如何处理 areduce或 a 中的异步请求map

javascript reduce node.js ecmascript-6

2
推荐指数
1
解决办法
414
查看次数