等待redux操作完成调度

时间:2016-12-03 09:03:27

标签: reactjs redux

我有以下动作创建者:

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操作完成?在标准反应土地中,我只使用setState回调:

this.setState({something: 'some thing'}, () => {
  console.log('something is set');
});

dispatch并未提供任何回调功能。

1 个答案:

答案 0 :(得分:9)

您始终可以将appendItem包装到promise中并将#include<iostream> using namespace std; struct node{ int value; node *right,*left; node(int value){ this->value=value; right=NULL; left=NULL; } }; class tree{ public: node *root; tree(){ this->root=NULL; } tree(int value){ root=new node(value); } void push(int value){ //To insert into the binary tree if(root==NULL){ root=new node(value); return ; } node *p=this->root; cout<<root<<endl<<p<<endl; while(p!=NULL){ if(value>=p->value){ p=p->right; } else if(value<p->value){ p=p->left; } } p=new node(value); } }; int main(){ tree t(30); t.push(20); } 作为参数传递给它

dispatch

然后你可以从const appendItem = (item, dispatch) => new Promise((resolve, reject) => { // do anything here dispatch(<your-action>); resolve(); }

这样调用它
scrolltoNextItem