gpt4 book ai didi

javascript - Cloud Functions for Firebase 突然超时

转载 作者:行者123 更新时间:2023-11-30 11:40:00 25 4
gpt4 key购买 nike

今天部署我的功能后,突然间我们的一些功能突然总是超时。我在云功能控制台中看到了这一点。这似乎发生在嵌套和返回 promise 时。奇怪的是,这以前从未发生过。

这是我的代码。

exports.pushMessageQueue = functions.database.ref('/userPushMessagesQueue/{userId}/{messageId}').onWrite(event => {
if (!event.data.exists()) {
console.log('DOES NOT EXIST!');
return "not exists";
}

console.log("EXISTS!");

const userId = event.params['userId'];
const messageId = event.params['messageId'];

const payload = event.data.val();

return database.ref('devices').orderByChild('user_id').equalTo(userId).once('value', snapshot => {
if (!snapshot.exists()) {
return "no devices found";
}

const devices = snapshot.val();

const deviceTokens = [];

snapshot.forEach(deviceSnap => {
const device = deviceSnap.val();
deviceTokens.push(device['fcm_key']);
});

const removeFromQueue = database.ref(`/userPushMessagesQueue/${userId}/${messageId}`);

console.log('then0');

return removeFromQueue.set(null).then(() => {
console.log('then1');
return admin.messaging().sendToDevice(deviceTokens, payload).then(() => {
console.log('then2');
return "send";
});
}, (error) => {
console.log('error1!');
console.log(error);
});
});
});

在控制台中记录了 then0,而不是 then1 和 then2。当我收到推送通知并且条目从队列中删除时。

我做错了什么吗?

最佳答案

您返回的是 once() 函数,而不是 promise 链。

基本上,你已经写了这个:

//returns the once promise
return ref.once('value', function(snap) {
/* some stuff that doesn't affect the promise chain happens here */
});

当你想要的是:

// returns whatever happens in the .then() callback
return ref.once('value').then(snap => {
/* now whatever you return here affects the promise chain */
});

关于javascript - Cloud Functions for Firebase 突然超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43098952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com