如果我有这样的云函数,函数setData()总是会执行直到函数结束(控制台“成功设置数据!”或“无法设置数据”)?因为我以类似的方式设置了一个函数,它有时似乎在执行过程中停止执行。
function setData() {
admin.database().ref(`someLocation`).set(true)
.then(() => {
return admin.database().ref(`anotherLocation`).set(true)
}).then(() => {
console.log("successfully set data!")
}).catch(err => {
console.log("could not set data", err)
})
}
exports.newPotentialMember = functions.database.ref('listenLocation')
.onCreate(event => {
setData()
})
答案 0 :(得分:4)
您现在没有从newPotentialMember
返回任何值。这意味着,只要newPotentialMember
返回,云功能就可以停止执行代码,这在setData
启动后会立即执行。由于写入数据库是异步发生的,因此必须从newPotentialMember
返回一个在所有写入完成后解析的承诺。
function setData() {
return admin.database().ref(`someLocation`).set(true)
.then(() => {
return admin.database().ref(`anotherLocation`).set(true)
})
}
exports.newPotentialMember = functions.database.ref('listenLocation')
.onCreate(event => {
return setData()
})
我建议您仔细阅读Firebase documentation on synchronous functions, asynchronous functions, and promises。