对象数组的散布运算符返回空数组

时间:2019-12-04 03:57:47

标签: javascript asynchronous redux redux-persist

关于散布运算符返回“ undefined”存在一些问题,但是在我的情况下,我什么也没得到。

这是过程

  1. 函数A是一个异步函数,并返回一个[listof_objA, listof_objB]
  2. 对函数求值后,结果的使用方式类似于.then(([listof_objA, listof_objB])=> { ...so on
  3. 然后像{li>一样分派dispatch(setListA(listof_objA))
someAsyncFunc().then(([listof_objA, listof_objB])=> {
  dispatch(setListA(listof_objA))
  dispatch(setListB(listof_objB))
})
  1. 在化简器中,console.log(action.payload)正确显示了获得的listof_objA
  2. 起初我是这样做的:
case Types.SET_LISTA: {
    console.log(action.payload)
    return {
      ...state,
      listof_objA: action.payload
    }
  }
  1. 正确地将listof_objA设置为新值,但是由于引用未更改(未从另一个问题中发现)而未导致重新呈现
  2. 所以我将其更改为:
case Types.SET_LISTA: {
    console.log(action.payload)
    return {
        ...state,
        listof_objA: [...action.payload]
    }
  }
  1. 现在listof_objA突然变成一个空列表!例如)[]action.payload仍正确显示获得的listof_objA
  2. 我已经尝试过JSON.parse(JSON.stringify(action.payload))const newList = [...action.payload]
  3. 但是所有克隆都返回一个空数组。
  4. 我在redux-logger中观察到了更多。折叠后的操作显示有效载荷为Array(0),但在下拉菜单中显示为Array(13) [{...},{...}, ... , {...}]

就是这样。我找不到任何解决方案。我不知道为什么会这样。看来这只发生在我身上。请帮忙。如果您需要更多信息,请发表评论。我在一家公司工作,所以我不能提供所有信息。但我会尽力而为。谢谢。

2 个答案:

答案 0 :(得分:1)

我猜您正在someAsyncFunc中使用Promise,如果这样,则得到一个空数组的原因是因为您可能未正确解析Promise链。

正确的Promise链应如下所示:

async function someAsyncFunc() {
    return await fetch('ENDPOINT')
        .then(response => {
            return response.ok
                ? response.json()
                : Promise.reject(Error('Unsuccessful response'));
        })
        .then(([listof_objA, listof_objB]) => {
            dispatch(setListA(listof_objA));
            dispatch(setListB(listof_objB));
        });
}

为了读取响应的正文,JSON。您需要调用response.json()方法。 json()方法读取响应的完整内容,并将文本解析为JSON。由于这是另一个异步操作,因此它本身会返回一个Promise。

希望有帮助

答案 1 :(得分:1)

@jank答案我希望可以解决您的问题,但是您可能希望看看redux-api-middleware是进行RPC调用的一种更为简单的方法,而没有所有的承诺。