我有以下动作创建者:
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
并未提供任何回调功能。
答案 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