redux 等到所有子承诺都已解决[关闭]

hsgswve4  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(73)

**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
16天前关闭
Improve this question
假设我有这样的东西:

const exampleFunction = () => {
const fetchActions = someArray.map(() => {
                dispatch(action()).then(response => {
                    if (response?.data) {
                        dispatch(subAction({response: response.data}))
                    }
                })
            })

return Promise.all(fetchActions)
.then(()=> dispatch(finalAction()))
}

字符串
我的问题是,当我分派我的finalAction时,所有的action都被分派/解决了,但subAction却没有。如何在所有操作和子操作都已解析时才执行分派(finalAction())?

vd8tlhqk

vd8tlhqk1#

问题是,当所有promises都解析时,Promise.all([...promises])解析,但你的fetchActions并不是一个真正的promise数组(你想要的),因为它们有 * 孤立的promise *,promise链断开。为了再次连接链,需要添加return

const exampleFunction = () => {
  const fetchActions = someArray.map(() => {
    return dispatch(action()).then(response => {
      if (response?.data) {
        return dispatch(subAction({
          response: response.data
        }))
      }
    })
  })

  return Promise.all(fetchActions)
    .then(() => dispatch(finalAction()))
}

字符串
请参阅here以了解有关promise chaining的更多信息。
基本上,这个想法是:如果你想让一个函数在它内部调用的promise被解析后再解析,你需要return那个promise。
举例来说:

const promiseA = () => {
  promiseY();
};

const promiseB = () => {
  promiseZ();
};

await Promise.all([promiseA(), promiseB()]);


上面的Promise.all立即解析,而不等待promiseYpromiseZ,因为它们是“孤立的promise”。
为了等他们,应该是这样的:

const promiseA = () => {
  return promiseY();
};

const promiseB = () => {
  return promiseZ();
};

await Promise.all([promiseA(), promiseB()]);

相关问题