【发布时间】:2018-02-27 22:04:16
【问题描述】:
我部署了以下云功能:
exports.onUserNameUpdated = functions.database.ref('users/{uid}/userName').onUpdate(event => {
if (event.data.previous.val() === event.data.val()) {
return;
}
const uid = event.data.ref.key();
const p1 = root.child(`/userlist/${uid}`).set(event.data.val());
root.child(`following/${key}/list`).once('value').then(snapshot => {
var followingPromises = [];
snapshot.forEach(child => {
const uid2 = child.val().uid;
const promise = rootRef.child(`followers/${uid2}/list/${key}/userName`).set(event.data.val());
followingPromises.push(promise);
});
return Promises.all(followingPromises);
}).catch(reason => {
console.log(reason);
});
root.child(`followers/${key}/list`).once('value').then(snapshot => {
var followerPromises = [];
snapshot.forEach(child => {
const uid2 = child.val().uid;
const promise = root.child(`following/${uid2}/list/${key}/userName`).set(event.data.val());
followerPromises.push(promise);
});
return Promises.all(followerPromises);
}).catch(reason => {
console.log(reason);
});
return p1;
});
部署后,我在终端收到以下警告:
warning Arrow function expected no return value consistent-return
这是函数的最后一行,return p1;。为什么没有预期返回的承诺?
【问题讨论】:
-
我不知道那条错误消息是什么意思,但我会说你有几个“悬空”的承诺没有被考虑到最终返回的承诺中,当所有工作完成时应该解决完全的。每次调用 set() 和 once() 及其承诺链,都需要在终止函数之前完全解决。
-
我只是将 Promise 链设置为(单独的)常量,然后返回 Promise.all([p1,....]),谢谢
标签: javascript firebase google-cloud-functions