Typescript 为什么我的SendGrid函数返回“0”;服务不可用;?

Typescript 为什么我的SendGrid函数返回“0”;服务不可用;?,typescript,firebase,google-cloud-functions,sendgrid,Typescript,Firebase,Google Cloud Functions,Sendgrid,我是SendGrid的新手,正在尝试使用Firebase云功能从我的React.js应用程序发送am电子邮件。 当有人想要发送消息时,我会向Firestore写入一个文档。然后,我收听该集合,当创建文档时,我从云功能发送电子邮件 我正在尝试使其正常工作,但在我的云函数中不断记录错误,并显示以下错误消息: Error: Service Unavailable at axios.then.catch.error (node_modules/@sendgrid/client/src/class

我是SendGrid的新手,正在尝试使用Firebase云功能从我的React.js应用程序发送am电子邮件。 当有人想要发送消息时,我会向Firestore写入一个文档。然后,我收听该集合,当创建文档时,我从云功能发送电子邮件

我正在尝试使其正常工作,但在我的云函数中不断记录错误,并显示以下错误消息:

Error: Service Unavailable
    at axios.then.catch.error (node_modules/@sendgrid/client/src/classes/client.js:133:29)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)
这是我的云函数,我检查了所有变量,它们都存在

exports.firestoreEmail = functions.firestore
  .document("email_messages/{messageID}")
  .onCreate((snap, context) => {
    const msgData = snap.data();
    if (!msgData) return;

    return db
      .collection("users")
      .doc(msgData.recipient_ID)
      .get()
      .then((doc) => {
        const recipientData = doc.data();
        if (!recipientData) return;

        const promises: any = [];

        const msg = {
          to: recipientData.email,
          from: msgData.sender_email,
          templateId: "d-myRandomTemplateId",
          dynamic_template_data: {
            sender_name: "Some One",
          },
        };

        const msg2 = {
          to: msgData.sender_email,
          from: recipientData.email,
          templateId: "d-myRandomTemplateId",
          dynamic_template_data: {
            sender_name: "Some One",
          },
        };



        promises.push(sgMail.send(msg));
        promises.push(sgMail.send(msg2));

        return Promise.all(promises);
      });
  });
请选中此项,其中指定了如何使用sgMail.send方法,该方法导致云函数返回服务不可用错误

send和sendMultiple方法返回承诺,因此您可以处理成功和捕获错误:

sgMail
  .send(msg)
  .then(() => {
    // Celebrate
  })
  .catch(error => {
    // Log friendly error
    console.error(error);

    if (error.response) {
      // Extract error msg
      const {message, code, response} = error;

      // Extract response msg
      const {headers, body} = response;

      console.error(body);
    }
  });
或者,您可以将回调函数作为最后一个参数传递:

sgMail
  .send(msg, (error, result) => {
    if (error) {
      // Do something with the error
    }
    else {
      // Celebrate
    }
  });

请让我知道它是否有效。

您的定价计划是什么?你需要参与“Blaze”定价计划。事实上,免费的“Spark”计划“只允许向谷歌拥有的服务发出出站网络请求”。请参阅(将鼠标悬停在“云功能”标题后的问号上),因为Sendgrid不是谷歌所有的服务,您需要切换到“Blaze”计划。@RenaudTarnec感谢您的评论。我在Firebase项目的Blaze计划中,SendGridOk中的免费计划,你如何定义
sgMail
?@RenaudTarnec用该信息编辑了我的问题似乎是正确的!奇怪的是,你得到了一个axios错误。。。Axios通常不参与您的云功能。。。有什么想法吗?还有其他使用axios的代码吗?谢谢,这帮我解决了我的问题。对于我的“发件人”字段,我设置了一封未设置为授权发件人的电子邮件
sgMail
  .send(msg)
  .then(() => {
    // Celebrate
  })
  .catch(error => {
    // Log friendly error
    console.error(error);

    if (error.response) {
      // Extract error msg
      const {message, code, response} = error;

      // Extract response msg
      const {headers, body} = response;

      console.error(body);
    }
  });
sgMail
  .send(msg, (error, result) => {
    if (error) {
      // Do something with the error
    }
    else {
      // Celebrate
    }
  });