Firebase函数RangeError:超出最大调用堆栈大小 [英] Firebase functions RangeError: Maximum call stack size exceeded

查看:73
本文介绍了Firebase函数RangeError:超出最大调用堆栈大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Callable函数,可以上传图像并相应地更新Firestore和Storage.该函数执行其应做的工作.但我仍然收到此错误:

I have a Callable function that uploads an image and update Firestore and Storage accordingly. The function does what it should do. but I still get this error:

未处理的错误RangeError:超出了最大调用堆栈大小

Unhandled error RangeError: Maximum call stack size exceeded

这是函数:

    export const uploadImageToStripe = functions.https.onCall(async (data, context) => {
    let businessDoc: DocumentSnapshot
    try {
        if (!fireStoreDB) {
            fireStoreDB = admin.firestore();
            fireStoreDB.settings(settings);
        }
        businessDoc = await fireStoreDB.collection('businesses').doc(data.business_id).get()
        const bucketName = functions.config().storage.default_bucket;
        const tempLocalFile = path.join(os.tmpdir(), 'img.jpg').trim();
        const tempLocalDir = path.dirname(tempLocalFile);
        const bucket = admin.storage().bucket(bucketName);

        // Create the temp directory where the storage file will be downloaded.
        await mkdirp(tempLocalDir);
        console.log('Temporary directory has been created', tempLocalDir);
        // Download file from bucket.
        await bucket.file(data.photo_location).download({ destination: tempLocalFile });
        console.log('The file has been downloaded to', tempLocalFile);

        // Downloads the file
        console.log(`gs://${bucketName}/${data.photo_location} downloaded to ${tempLocalDir}.`)
        const uploadedFile: stripeM.fileUploads.IFileUpdate = await stripe.fileUploads.create({
            file: {
                data: fs.readFileSync(tempLocalFile),
                name: 'img.jpg',
                type: 'application.octet-stream',
            }
        });
        if (!businessDoc.exists) {
            throw new functions.https.HttpsError('not-found', `Couldn't find business document ` + data.business_id);
        }
        await stripe.accounts.update(businessDoc.data().stripeId,
                { document: uploadedFile.id });
        await businessDoc.ref.update({ "photoNeeded": false })
        return await bucket.file(data.photo_location).delete()
    } catch (error) {
        console.error(error);
        await businessDoc.ref.update({ "photoNeeded": true })
        throw new functions.https.HttpsError('unavailable', `failed to upload photo to stripe`);
    }
})

有什么主意我为什么会出现此错误?

Any ideas why I get this error?

推荐答案

此行抛出错误:

return await bucket.file(data.photo_location).delete()

将其拆分为:

await bucket.file(data.photo_location).delete()
return "Success" 

解决它.

这篇关于Firebase函数RangeError:超出最大调用堆栈大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆