猿问

“错误:无法修改已提交的 WriteBatch”,尝试在 firebase 函数中使用批处理写入时

因此,我正在尝试在我的firebase函数中使用批处理写入来以500个批处理的批处理我的写入。但是,由于某种原因,我收到错误“错误:无法修改已提交的 WriteBatch”,并且似乎无法发现我做错了什么。它正在存储前几个结果,但之后它在我的云函数日志中给了我错误。任何建议将不胜感激= D



          messages.forEach((item, index) => {

            var all = _.find(item.parts, { which: "" });

            var id = item.attributes.uid;

            var idHeader = "Imap-Id: " + id + "\r\n";

            // eslint-disable-next-line handle-callback-err

            simpleParser(idHeader + all.body, (err, mail) => {

              // access to the whole mail object

              console.log(mail.subject);

              console.log(mail.html);


              let newDate = mail.date.valueOf();


              batch.set(

                docRef,

                {

                  Emails: admin.firestore.FieldValue.arrayUnion(

                    JSON.stringify({

                      subject: mail.subject,

                      body: mail.text,

                      date: newDate,

                      from: mail.from,

                    })

                  ),

                  //....

                },

                { merge: true }

              );

              if (

                (index % 500 === 0 && index > 0) ||

                index === messages.length - 1

              ) {

                return batch.commit().then(() => {

                  return console.log("SUCCESS");

                });

              }

            });

          });


三国纷争
浏览 70回答 1
1回答

慕沐林林

批处理过程需要有两个部分,一个 main 函数和一个来自每个批处理的回调。问题是,一旦为第一个批处理提交了批处理,您就试图重新声明批处理进程。创建一个新批处理或在特定函数中分离它,如文档示例。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答