【发布时间】:2017-10-24 10:07:19
【问题描述】:
我在 node.js 上有应用程序并连接到 firebase。我需要正确更新数据。
如何在 promise 中调用函数 getOrSetUserTrackDay(day) 以获得良好的价值,而不是未定义?
let userData = [];
let userID = req.params.userID;
let today = req.params.today;
let yesterday = req.params.yesterday;
db.collection('users').doc(userID).get()
.then((userDataFromDB) => {
if (!userDataFromDB.exists) {
res.status(404).send('User not found');
}
else {
function getOrSetUserTrackDay(day) {
let userTrackRef = db.collection('history').doc('daily').collection(day).doc(userID);
userTrackRef.get()
.then(userTrackData => {
if (userTrackData.exists) {
return userTrackData.data(); // good
}
else {
let userNewData = {
username: userDataFromDB.data().username,
photoUrl: userDataFromDB.data().photoUrl
};
userTrackRef.update(userNewData);
return userNewData; // good
}
})
}
userData = {
user: userDataFromDB.data(),
today: getOrSetUserTrackDay(today), // undefined
yesterday: getOrSetUserTrackDay(yesterday) // undefined
};
res.json(userData);
}
})
.catch((err) => {
console.log(err);
res.status(404).send(err);
});
【问题讨论】:
-
好吧
getOrSetUserTrackDay没有 return 语句,因此它返回undefined- 但是,由于它包含异步代码,您将永远无法同步使用它
标签: javascript node.js es6-promise google-cloud-firestore