Javascript firebase函数返回了未定义的预期承诺或值
我的代码如下所示。在这两种情况下,它抛出返回null的错误。我应该在函数的末尾也返回null吗?我担心如果那样会使函数不等待完成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
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()
调用
您可能会发现中的函数很有用。您可能还想看一下。您的解释很有道理。如何将其转化为承诺?这不是一个简单的“转化”。您需要以我描述的方式使用承诺的方式编写代码。