此错误通常发生在使用 Firebase Functions 时,代码中的 then() 方法没有正确返回值或抛出 Promise。下面是一个解决方法的示例:
假设你有一个 Firebase 云函数,该函数从 Firestore 中读取数据,然后将其写入 Realtime Database。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
// 云函数
exports.copyData = functions.https.onRequest((req, res) => {
// 从 Firestore 读取数据
admin.firestore()
.collection('users')
.get()
.then((snapshot) => {
// 将数据写入 Realtime Database
const promises = [];
snapshot.forEach((doc) => {
promises.push(admin.database().ref(`/users/${doc.id}`).set(doc.data()));
});
return Promise.all(promises); // 返回 Promise.all(),以确保所有写入操作完成
})
.then(() => {
res.send('Data copied successfully.');
})
.catch((error) => {
console.error('Error copying data:', error);
res.status(500).send('Error copying data.');
});
});
在上述示例中,我们在读取 Firestore 数据后使用了一个数组来存储将数据写入 Realtime Database 的 Promise 对象。然后,我们使用 Promise.all() 方法来等待所有写入操作完成,并在最后的 then() 方法中发送响应。
请注意,如果你的代码中有多个 then() 方法链,每个 then() 方法都应该返回一个值或抛出 Promise,以确保函数的正确执行。确保所有的异步操作都得到正确处理和返回。