我正在尝试使用node.js
编写Firebase函数在下面的代码" pushNotifications"在messagesDB中有新条目时触发函数。
我从messagesDB收到邮件字典中的电子邮件。
如果没有他的uid,我将无法获得用户的状态,并且需要按顺序执行。
(我可以使用硬编码值单独执行它们,但不能按顺序执行) 任何帮助都会有所帮助。
function getUserStatus(uid) {
var onlineStatus = true;
console.log('getting the status.........', uid);
return firestoreDB.collection('userstatus').doc(uid).get()
.then(doc => {
if (doc.exists) {
onlineStatus = doc.data()['online'];
}
return onlineStatus;
})
.catch(err => {
return err;
});
}
function getUserID(toId) {
var uid;
console.log('get uid function....');
return admin.auth().getUserByEmail(toId)
.then((userRecord) => {
console.log('record :', userRecord);
uid = userRecord.uid
console.log('uid :', uid);
console.log(`getting document`);
return uid;
})
.catch((error) => {
console.log("Error fetching getUserID :", error);
return err;
})
}
exports.pushNotifications = functions.database.ref('/Messages/{messageID}').onWrite(event => {
console.log('event Data : ', event.after._data);
const data = event.after._data;
const fromId = data.from;
const toId = data.to;
const message = data.messageText;
console.log(fromId + ' sent a message to ' + toId);
console.log('getting uid..');
const statusOnline = getUserID(toId)
.then(uid => {
console.log('got uid', uid);
getUserStatus(uid)
})
.then(status => {return status})
.catch(err => console.log('Error executing the promises', err.message));
console.log('statusOnline : ', statusOnline);
console.log('Done.......');
});
答案 0 :(得分:2)
您缺少一个return语句,因此下面的承诺没有收到任何输出。
const statusOnline = getUserID(toId)
.then(uid => {
console.log('got uid', uid);
return getUserStatus(uid); // return your result
})
.then((status) => .... )
并且您并没有真正对您的状态做任何事情。收到状态后尝试console.log(status)
。
.then(status => {
console.log("the status obtained was ", status);
return status
})
并且承诺不会像您使用它们那样起作用。通过将变量设置为Promise,您无法在完成自身执行之前简单地控制其输出。所以代替console.log('statusOnline : ', statusOnline);
做这样的事情
statusOnline.then(result => {console.log('statusOnline : ', result)});
答案 1 :(得分:0)
我认为你想要'解决'你'回归'和'拒绝'你捕获/投掷的地方。