Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firebase函数返回了未定义的预期承诺或值_Javascript_Firebase_Google Cloud Functions - Fatal编程技术网

Javascript firebase函数返回了未定义的预期承诺或值

Javascript firebase函数返回了未定义的预期承诺或值,javascript,firebase,google-cloud-functions,Javascript,Firebase,Google Cloud Functions,我的代码如下所示。在这两种情况下,它抛出返回null的错误。我应该在函数的末尾也返回null吗?我担心如果那样会使函数不等待完成 exports.on_user_created_update_generate_barcode = functions.database.ref("/users/{id}") .onCreate((snapshot, context) => { console.log("start of on_user_created_update_generate_b

我的代码如下所示。在这两种情况下,它抛出返回null的错误。我应该在函数的末尾也返回null吗?我担心如果那样会使函数不等待完成

exports.on_user_created_update_generate_barcode = functions.database.ref("/users/{id}")
.onCreate((snapshot, context) => {
    console.log("start of on_user_created_update_generate_barcode ")   
    const user = snapshot.val();
    const referralCode = user._referralCode
    const uid = context.params.id
    console.log("Referral code is:" + referralCode + " for user:" + uid)



    bwipjs.toBuffer({
        bcid:        'code128',       // Barcode type
        text:        referralCode,    // Text to encode
        scale:       3,               // 3x scaling factor
        height:      10,              // Bar height, in millimeters
        includetext: true,            // Show human-readable text
        textxalign:  'center',        // Always good to set this
    }, function (err, png) {
        if (err) {
            console.err("failed to generate bar code:::" + err)
            return null
        } else {
            console.log("png generated")
            //console.log(png)
            const pngImg = 'data:image/png;base64,' + png.toString('base64')
            var db = admin.database();
            var userRef = db.ref('users')
            return userRef.child(uid).update({"_barcode": pngImg})
        }
    });

})

错误消息是正确的-您没有从函数返回任何内容,这与返回
未定义的
相同。相反,您要做的是从传递给
bwipjs.toBuffer()
的函数回调返回null。该内部函数的返回值不会传播到外部函数

如果只是从函数的顶层返回null,则可以停止该错误消息,但代码将无法正常工作。在函数返回一个非承诺值后,云函数将关闭函数内部启动的所有异步工作。它可能看起来什么也不做

您需要做的是返回一个承诺,该承诺将在函数中的所有异步工作完成时解析。现在,这看起来像是对
toBuffer()
的调用,以及对实时数据库的
update()
调用


您可能会发现中的函数很有用。您可能还想看一下。

您的解释很有道理。如何将其转化为承诺?这不是一个简单的“转化”。您需要以我描述的方式使用承诺的方式编写代码。