在功能日志中,我可以看到它正在运行,并且更新已应用于文档,但是它正在超时。
日志显示:
11:41:47.474 PM addContact函数执行耗时60003毫秒,已完成 状态:“超时”
11:40:47.743 PM addContact交易成功!
11:40:47.659 PM addContact 9 9
11:40:47.659 PM addContact
11:40:47.659 PM addContact 8 8
11:40:47.656 PM addContact
11:40:47.472 PM addContact函数开始执行
exports.addContact = functions.https.onRequest((req, res) => {
let user_id="fhr..."
let asker_id="wnz...";
let giver_id="Sp7...";
//const requestRef = admin.firestore().collection('contactRequests').doc(user_id)
const askerRef = admin.firestore().collection('users').doc(asker_id)
const giverRef = admin.firestore().collection('users').doc(giver_id)
var transaction = admin.firestore().runTransaction(t => {
return t.getAll(giverRef, askerRef)
.then(docs => {
const id1 = docs[0];
const id2 = docs[1];
if ((id1.exists && id2.exists)) {
// do stuff
let giverContacts = docs[0].data().foo
let askerContacts = docs[1].data().foo
console.log("****")
console.log(giverContacts, askerContacts)
giverContacts=giverContacts+1
askerContacts=askerContacts+1
console.log("****")
console.log(giverContacts, askerContacts)
t.update(giverRef, {foo: giverContacts})
t.update(askerRef, {foo: askerContacts})
return true
} else {
throw new Error();
}
})
})
.then(result => console.log('Transaction success!') )
.catch(err => console.log('Transaction failure:', err) );
return transaction;
});
答案 0 :(得分:1)
之所以超时,是因为您从未向客户端发送响应。 HTTP类型的函数仅在发送响应后终止。您什么都可以发送:
.then(result => {
console.log('Transaction success!')
res.send("OK") // send anything at all to terminate the function
})
对于所有其他类型的功能,您必须在完成所有工作后返回承诺解决方案。
请read the documentation以获取更多信息。