我有以下 Action 创建者:
export function scrolltoNextItem(item) {
return (dispatch, getState) => {
dispatch(appendItem(Item));
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
}
}
问题是
scrollToNextItem
在appendItem完成之前运行,并且滚动位置最终不正确。我可以通过添加setTimeout
来使这种情况发生,以使脚本的执行在运行scrollToNextItem
之前等待下一个刻度:export function scrolltoNextItem(item) {
return (dispatch, getState) => {
dispatch(appendItem(Item));
setTimeout(() => {
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
}, 0);
}
}
如何等待
appendItem
操作完成?在标准React Land中,我只使用setState
回调:this.setState({something: 'some thing'}, () => {
console.log('something is set');
});
但是
dispatch
不提供任何回调功能。 最佳答案
您始终可以将appendItem包装到promise中,并将dispatch
作为参数传递给它
const appendItem = (item, dispatch) => new Promise((resolve, reject) => {
// do anything here
dispatch(<your-action>);
resolve();
}
然后您可以从
scrolltoNextItem
像这样调用它export function scrolltoNextItem(item) {
return (dispatch, getState) => {
appendItem(Item, dispatch).then(() => {
dispatch(
scrollToNextIndex(
getState().items.length - 1
)
)
})
}
}