【发布时间】:2019-09-04 17:10:57
【问题描述】:
在我下面的函数中,addToFlatList 只被调用一次,尽管我知道我的数据库中有几个项目需要添加。似乎拳头addToFlatList 永远无法解决?我做错了什么?
photosSnapshot.forEach(async function(childSnapshot) {
await addToFlatList(childSnapshot.key, childSnapshot.val())(dispatch);
});
addToFlatList 函数:
const addToFlatList = (photoId, photoObj) => async(dispatch) => {
database.ref('users').child(photoObj.author).once('value').then((userSnapshot) => {
var userInfo = userSnapshot.val();
dispatch({type: "GOT_USER", payload: userInfo});
}).catch(error => {
dispatch({type: "GOT_ERROR"});
});
}
更新:
试图像这样返回调度。 addToFlatList 仍然只被调用一次。
const addToFlatList = async(photoId, photoObj) => {
return (dispatch) => {
database.ref('users').child(photoObj.author).once('value').then((userSnapshot) => {
var userInfo = userSnapshot.val();
dispatch({type: "GOT_USER", payload: userInfo});
}).catch(error => {
dispatch({type: "GOT_ERROR"});
});
}
}
也试过这个:
const addToFlatList = async(photoId, photoObj) => {
database.ref('users').child(photoObj.author).once('value').then((userSnapshot) => {
return (dispatch) => {
// never hit this point
var userInfo = userSnapshot.val();
dispatch({type: "GOT_USER", payload: userInfo});
}
}).catch(error => {
dispatch({type: "GOT_ERROR"});
});
}
【问题讨论】:
-
你的数据库 firebase 是偶然的吗?
-
您的
addToFlatList被标记为async,但await和return都不是承诺? -
“从未解决”是什么意思?它永远不会继续到
.forEach的下一次迭代吗? -
@Bergi 它在异步函数末尾隐式解析为
undefined。 -
@IvanRubinson Firebase。而且它永远不会继续到下一次迭代。似乎它只是在等待某些东西,但调度被解雇了
标签: javascript ecmascript-6 async-await es6-promise dispatch