【问题标题】:Returned promise not expected in cloud function云功能中不期望返回的承诺
【发布时间】: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


【解决方案1】:

我会说你有几个 Promise 在这里“悬空”,没有考虑到最终返回的 Promise 中,当所有工作完成后应该解决这些 Promise。每次调用 set() 和 once() 及其承诺链,都需要在终止函数之前完全解决。

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 2023-04-01
    • 2018-04-19
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多