我创建了一个可运行几个功能的Angular JS Web应用程序。
我的firebase数据库中有一个JSON对象数组,这是一个摘要:
[
{
"Name": "Deji",
"id": 2
},
{
"Name": "Sonia",
"id": 3
},
{
"Name": "Fabio",
"id": 1
},
{
"Name": "De",
"id": 5
},
{
"Name": "Darmian",
"id": 6
},
{
"Name": "Fred",
"id": 7
},
{
"Name": "Klaus",
"id": 8
},
];
下面是在范围内完美运行的相关功能:
$firebaseArray(orderedPlayers)
.$loaded(function(loadedPlayers) {
var normalizedPlayers = loadedPlayers.reduce(function(acc, next) { acc[next.id] = next; return acc; }, {});
var selectedPlayers = $scope.pick.map(function(num){
return normalizedPlayers[num];
});
$scope.players = selectedPlayers;
这会将$scope.pick
(由6个数字组成的数组)的值与对象JSON数组中每个对象的id值相对应,以重现其id
值与$scope.pick
数组中的6个数字。
我在firebase云功能中尝试过的事情:
exports.sync = functions.https.onRequest((req, res) => {
admin.database().ref('users').once('value').then(function (snapshot) {
var updates = {};
//get firebase reference
return admin.database().ref("Player").child("playerweek12").once('value').then(function (dataSnapshot) {
var orderedPlayers = dataSnapshot.val();
snapshot.forEach(function (userSnapshot) {
var users = userSnapshot.val();
var selection = users.selection;
//mapping function
var normalizedPlayers = orderedPlayers.reduce(function(acc, next) { acc[next.id] = next; return acc; }, {});
var selectedPlayers = selection.map(function(num){
return normalizedPlayers[num];
});
var pick = selectedPlayers ;
updates[`/users/${userSnapshot.key}/week2`] = pick;
});
return admin.database().ref().update(updates).then(function () {
return res.send('it worked');
});
});
});
});
selection
返回由用户选择的6个数字组成的数组(相当于上面的$scope.pick
)。但是,在范围内完美运行的映射功能无法在firebase云功能中运行。
它返回以下错误:
TypeError: selection.map is not a function
该函数不能在云函数中直接运行吗?我运行了一个测试,选择返回了由用户选择的6个数字组成的数组。有办法使它起作用吗?也许在范围内使用$firebaseArray
方法有帮助吗?