Nic*_*ick 3 firebase firebase-realtime-database redux redux-saga
我有一个redux传奇API,我连接到firebase并读取数据记录.
var roomRef = firebase.database().ref('/Users/' + userid + '/rooms')
var rooms = []
roomRef.once('value', function (snap) {
var roomkeys = snap.val()
for (var roomkey in roomkeys) {
firebase.database().ref('/Rooms/' + roomkey).once('value', function (item) {
rooms.push(item.val())
})
}
console.log(rooms)
--> put({type: 'LOAD_ROOMS', payload: { rooms: rooms}})
})
Run Code Online (Sandbox Code Playgroud)
由于我的put在回调函数中,我不能使用yield关键字.如何使用新值"房间"调度事件以更改减速器的状态
解决这个问题的方法是将回调转换为promise.redux-saga知道如何解决传递给调用效果的 promise .但是召唤需要一个功能,而不是承诺.来自文档:
如果结果是Promise,则中间件将暂停Generator,直到Promise被解析,在这种情况下,Generator将使用已解析的值恢复.或直到Promise被拒绝,在这种情况下,生成器内部会抛出错误.
var roomRef = firebase.database().ref('/Users/' + userid + '/rooms')
var rooms = yield call(function() {
return new Promise(function(resolve, reject) {
roomRef.once('value', function (snap) {
var rooms = []
var roomkeys = snap.val()
for (var roomkey in roomkeys) {
firebase.database().ref('/Rooms/' + roomkey).once('value', function (item) {
rooms.push(item.val())
})
}
resolve(rooms)
})
})
})
yield put({type: 'LOAD_ROOMS', payload: { rooms: rooms}})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |