我尝试了一切,我具有此云功能(否则可以正常工作):
exports.contentServer = functions.https.onRequest((request, response) => {
admin.database().ref('/list/' + "abc").once('value').then(function(snapshot) {
console.log(snapshot.val() );
return null;
}).catch(function(error) {
console.log("Error getting document:", error);
return response.send(error);
});
});
还是这个:
admin.database().ref('/list').once('value').then(function(snapshot) {
var event = snapshot.val();
app.tell('Result: '+event);
});
和这个:
exports.contentServer = functions.https.onRequest((request, response) => {
var db = admin.database();
db.ref("list/abc").once("value").then(snap => {
var store = snap.val().description;
return store;
}).then(() => {
var store = snap.val().description;
return store;
}).then(snap => {
var store = snap.val().description;
return store;
}).catch(err => {
console.log(err);
response.send("error occurred");
});
});
总是得到错误信息:
“无法处理请求”
或者在部署该程序时出现错误:
Each then() should return a value or throw
我有一个名为 list 的集合,里面有一个名为“ abc” 的文档。
我必须包括一些东西吗?我必须在Firebase中进行设置才能使其正常工作?有什么基本的没人写的文档吗?
答案 0 :(得分:2)
在上述说明之后进行了修改,以解释OP使用Firestore而不是实时数据库
您应该执行以下操作。在发送回响应之前,您必须等待get()
方法返回的promise解析。为此,您需要使用then()
方法,请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
exports.contentServer = functions.https.onRequest((request, response) => {
admin.firestore().collection('list').doc('abc').get()
.then(docSnapshot => {
console.log(docSnapshot.data());
return response.send(docSnapshot.data()); // or any other value, like return response.send( {result: "success"} );
})
.catch(error => {
console.log("Error getting document:", error);
return response.status(500).send(error);
});
});
如上面的评论所述,我建议您观看Firebase视频系列中有关“ JavaScript承诺”的3个视频:https://firebase.google.com/docs/functions/video-series/
答案 1 :(得分:0)
尝试一下
已更新。按照@Renaud Tarnec指出的,在then()
中返回响应。
使用实时数据库
exports.contentServer = functions.https.onRequest((request, response) => {
var database = admin.database();
database.ref('list').child('abc').once("value", snapshot => {
const data = snapshot.val();
return response.send(data);
}).catch(error => {
return response.status(500).send(error);
});
});
如果您使用的是Firestore。
exports.contentServer = functions.https.onRequest((request, response) => {
const firestore = admin.firestore();
firestore.collection("list").doc('abc').get().then(doc => {
console.log(doc.data());
return response.send(doc.data());
}).catch(error => {
return response.status(500).send(error);
});
});
重要提示:不要忘记通过调用response.redirect(), response.send(), or responses.end()
终止请求,这样可以避免运行太长时间的函数产生过多费用