鉴于以下功能,我收到警告:
警告避免嵌套承诺promise/no-nesting(第6行)
我应该如何重新构建功能以修复警告?
function FindNearbyJobs(uid, lat, lng){
return admin.database().ref(`users/${uid}/nearbyjobs`).remove().then(data => {
return new Promise((resolve, reject) => {
const geoQueryJobs = geoFireJobs.query({center: [lat, lng], radius: 3 });
geoQueryJobs.on("key_entered", (key, location, distance) => {
return Promise.all([admin.database().ref(`jobs/${key}/category`).once('value'), admin.database().ref(`users/${uid}/account/c`).once('value')]).then(r => {
const cP = r[0];
const cO = r[1];
if (cO.val().includes(cP.val())){
return admin.database().ref(`users/${uid}/nearbyjobs/${key}`).set({ d: distance });
}else{
return null;
}
});
});
geoQueryJobs.on("ready", () => {
resolve();
});
});
});
}
Run Code Online (Sandbox Code Playgroud) 函数执行没有错误.我正在获得这个地位
函数执行耗时60004毫秒,完成状态:'超时'
我不确定是什么问题.我功能中的一切对我来说都很好.我还注意到函数有时需要几秒钟来更新数据库,有时它会立即生效.执行时间从即刻到几秒不等,这是正常的吗?应该立即执行时间吗?
exports.countproposals = functions.database.ref("/proposals/{jobid}/{propid}").onWrite((event) => {
const jobid = event.params.jobid;
const userId = event.params.propid;
const userRef = admin.database().ref(`users/${userId}/proposals/sent`);
if (event.data.exists() && !event.data.previous.exists()) {
userRef.child(jobid).set({
timestamp: admin.database.ServerValue.TIMESTAMP
});
} else if (!event.data.exists() && event.data.previous.exists()) {
userRef.child(jobid).remove();
}
const collectionRef = admin.database().ref(`/jobs/${jobid}`);
const countRef = collectionRef.child("proposals");
return countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
});
Run Code Online (Sandbox Code Playgroud)