【问题标题】:Yet Another Google Firebase Error "Function returned undefined, expected Promise or value"另一个 Google Firebase 错误“函数返回未定义、预期的承诺或值”
【发布时间】:2019-05-11 20:02:46
【问题描述】:

我已阅读所有相关问题并观看了 Firebase 视频 re Promises,但我仍然无法摆脱上述错误。附加的代码在本地运行良好,但从云功能完成后,我不断收到此错误。任何帮助将不胜感激!

exports.enquiry = functions.firestore.document('users/{userId}/enquiries/{enquiryId}')
    .onCreate((snap, context) => {
        let enquiryDoc = snap.data();
        let {
            uid,
            type
        } = enquiryDoc;



        function ResponseGeneration(type) {
            switch (type) {
                case 'type1':
                    {
                        Response = 5;
                        return Promise.resolve(Response);
                    }

                case 'type2':
                    {
                        var body = `<QUOTA><DATE>20181203</DATE></QUOTA>`;

                        const call = request.post({
                                url: "xxx",
                                port: 443,
                                method: "POST",
                                headers: {
                                    'Content-Type': 'text/xml',
                                },
                                body: body,
                                json: false
                            })
                            .then((parsedBody) => {
                                console.log(parsedBody.statusCode);
                                console.log(parsedBody);
                                return xml2js(parsedBody);
                            })
                            .then((js) => {
                                console.log('JSON.stringify(js):', JSON.stringify(js));
                                var json = JSON.stringify(js);
                                var jsonParsed = JSON.parse(json);
                                if (jsonParsed.hasOwnProperty('Error')) {
                                    Response = jsonParsed['Error']['Message'];
                                } else {
                                    Response = jsonParsed['RESULT'];
                                }
                                console.log("Response: ", Response);

                                return Promise.resolve(Response);

                            }).catch(function(err) {
                                console.log("error from post:", err);
                                // return Promise.resolve(err);
                            });

                        return Promise.all(call); //also tried with Promise.resolve
                    }

                default:
                    return Promise.resolve(0.0);
            }
        }

        ResponseGeneration(type).then((response) => {
            return snap.ref.update({
                quote: response,
                status: 'quoted',
                quoteId: context.params.enquiryId
            });
        });
    });

如您所见,它到处都返回 Promise,但 Firestore 控制台仍在打印:

Function returned undefined, expected Promise or value

我不太清楚还有什么地方可能会错过承诺。有什么帮助吗?

【问题讨论】:

  • 您的主要功能仍然没有返回任何内容。您在其他地方有其他回报,但不是在顶层。

标签: javascript firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

onCreate() 调用的顶级函数没有返回任何内容,因此出现错误。

您需要将您的电话中的Promise返回给ResponseGeneration

    return ResponseGeneration(type).then((response) => {
        return snap.ref.update({
            quote: response,
            status: 'quoted',
            quoteId: context.params.enquiryId
        });
    });

【讨论】:

  • 谢谢,错过了!!你永远不能有太多的“回报”! :)
猜你喜欢
  • 2019-06-09
  • 2018-06-17
  • 2020-12-23
  • 2018-04-18
  • 1970-01-01
  • 2018-10-30
  • 2018-12-03
  • 2019-08-12
  • 1970-01-01
相关资源
最近更新 更多