上有一个永久的侦听器。
我正在用firebase
构建一个react-redux
应用程序。
这是我的动作创建器:
export function fetchUser(uid) {
let ref = firebase.database().ref('users/' + uid)
return dispatch => {
ref.on("value", (snapshot) => {
let obj = snapshot.val()
dispatch({
type: FETCH_USER,
payload: obj
})
})
}
}
在我的React组件中,我希望能够链接它并连接另一个动作。比如:
componentWillMount() {
let userId = 'some user id'
this.props.fetchUser(userId).then(()=> {
this.props.updateUser() // perform another action after the fetch is complete
})
}
我很难做到这一点。
- 一个问题是Firebase
on
事件监听器没有实现承诺接口。 - 我不想移动
fetchUser
行动内部的后续行动作为其他组件可以调用fetchUser
以及其他目的。
我觉得这应该是直接的,但我是新手redux和firebase,所以所有的帮助将不胜感激。
您没有从firebase返回承诺的事实似乎并不是您的问题。你可以在你的动作创建器中返回一个承诺,然后使用它的分辨率在你的componentWillMount()
中启动.then()
。我们做了这样的事情:
export function fetchUser(uid) {
let ref = firebase.database().ref('users/' + uid);
return dispatch => {
return new Promise( ( resolve, reject ) => {
ref.on("value", (snapshot) => {
let obj = snapshot.val();
dispatch({
type: FETCH_USER,
payload: obj
});
resolve();
})
});
}
}
同样,如果你想从firebase得到承诺,你可以使用.once()。这实际上可能更适合您,这样您就不会在/users
ref.