i正在关注云功能的教程,并对代码进行了一些修改以适合我的项目。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotif = functions.database().ref("/admin/announcement_record").onCreate(event =>{
const snapshot = event.data;
// Notification details.
const text = snapshot.val().text;
const payload = {
notification: {
title: "New Announcement",
body: text ? (text.length <= 100 ? text : text.substring(0, 97) + '...') : ''
}
};
// Get the list of device tokens.
return admin.database().ref("/admin/fcmtokens").once('value').then(allTokens => {
if (allTokens.val()) {
// Listing all tokens.
const tokens = Object.keys(allTokens.val());
// Send notifications to all tokens.
return admin.messaging().sendToDevice(tokens, payload).then(response => {
// For each message check if there was an error.
const tokensToRemove = [];
response.results.forEach((result, index) => {
const error = result.error;
if (error) {
console.error('Failure sending notification to', tokens[index], error);
// Cleanup the tokens who are not registered anymore.
if (error.code === 'messaging/invalid-registration-token' ||
error.code === 'messaging/registration-token-not-registered') {
tokensToRemove.push(allTokens.ref.child(tokens[index]).remove());
}
}
});
return Promise.all(tokensToRemove);
});
}
});
});
尝试部署它时,我会得到这个
28:79警告预计将在箭头结束时返回一个值 功能一致的返回
29:3每个错误,然后((应返回一个值或投掷诺言/始终返回
34:12警告避免嵌套承诺承诺/无纽扣
寻找有关如何修复或解决教程的建议。
我要对此进行一些修剪,但是大概,error[:] Each then() should return a value or throw
可能是阻止您前进的事情。在您的承诺中,您需要始终回报诺言或从每个分支机构中丢下错误 - 这里有一些文档和示例。
因此,您需要在if
语句的外部添加某种类型的返回,例如:
return admin.database().ref("/admin/fcmtokens").once('value').then(allTokens => {
if (allTokens.val()) {
// Listing all tokens.
const tokens = Object.keys(allTokens.val());
// Send notifications to all tokens.
return admin.messaging().sendToDevice(tokens, payload).then(response => {
// [...snip...]
return Promise.all(tokensToRemove);
});
}
return null; // explicitly return `null`.
// ^^^^^^
});
});
应该可以帮助您克服绒毛错误并继续前进。第一个警告与此错误有关(我认为(。要解决第二个警告,您必须进行更多的重组,但是我认为这不是继续前进的必要条件。