【发布时间】:2018-06-28 11:51:03
【问题描述】:
我在运行云功能时遇到来自 firebase 的错误:
FIREBASE 警告:用户回调引发了异常。类型错误: 无法将 undefined 或 null 转换为对象
这是一个可能发生错误的sn-p:
// const functions = require('firebase-functions');
// const admin = require('firebase-admin');
// const underscore = require('underscore');
// admin.initializeApp(functions.config().firebase);
// export updateSimilars = functions.database.ref('...').onWrite(event => {
...
for (var i in callerFlattenLikesDislikes) {
getOtherUsersPromises.push(getOtherUsersFromName(callerFlattenLikesDislikes[i], genre));
}
console.log('getOtherUsersPromises length: ' + getOtherUsersPromises.length);
return Promise.all(getOtherUsersPromises).then(dataArr => {
console.log(dataArr); // will never fire
dataArr.forEach(data => {
data.forEach(user => {
if (otherUsers.indexOf(user) > -1 && user !== userId) {
otherUsers.push(user);
}
});
});
....
....
function getOtherUsersFromName(name, genre) {
console.log('fired getOtherUsersFromName: ' + name);
return new Promise((resolve, reject) => {
admin
.database()
.ref('/names/' + genre + '/' + name)
.once('value', snapshot => {
var dic = snapshot.val();
var dislikingUsers = Object.keys(dic['dislikingUsers']);
var likingUsers = Object.keys(dic['likingUsers']);
var users = underscore.union(dislikingUsers, likingUsers);
console.log('will resolve: ' + users);
resolve(users);
});
});
}
基本上,我有一组要异步执行的承诺(多个输入项的相同 firebase 查询)。 我想在开始处理之前收集所有结果。
但是Promise.all 之后的.then 似乎永远不会被解雇,而且我有以下firebase 日志:
有人帮我吗?
谢谢!
【问题讨论】:
标签: javascript node.js firebase promise google-cloud-functions