簡體   English   中英

如何從另一個等待變量中等待值

[英]how to await value from another await variable

我不知道應該如何構建我的代碼。

基本信息:

webhook(對講)--> 谷歌雲功能(等待值)--> 將消息發布到 slack。

問題:

我的代碼工作正常,直到我需要從另一個 await function 獲取值,我不確定如何“暫停”第二個 await 直到第一個 await 完成。

代碼:

// first function to get the information about agent
const getTeammateInfo = async function (teammate_id) {
  try {
    const response = await axios.get("https://api.intercom.io/admins/" + teammate_id, {
      headers: {
        'Authorization': "Bearer " + INTERCOM_API_AUTH_TOKEN,
        'Content-type': "application/json",
        'Accept': "application/json"
      }
    });
    const { data } = response
    return data
  } catch (error) {
    console.error(error);
  }
};

// second function, which needs values from first function in order to find data
const slackID = async function (slack_email) {
  if (slackID) {
    try {
      const response = await axios.get("https://api.intercom.io/admins/" + slack_email, {
        headers: {
          'Authorization': "Bearer " + SLACK_API_TOKEN,
          'Content-type': "application/json",
          'Accept': "application/json"
        }
      });
      const { user } = response
      return user
    } catch (error) {
      console.error(error);
    }
  }
};

它在 Google Cloud Function (

exports.execute = async (req, res) => {
  try {

    // map of req from intercom webhook
    let {
      data: {
        item: {
          conversation_rating: {
            rating,
            remark,
            contact: {
              id: customerId
            },
            teammate: {
              id: teammateId
            }
          }
        }
      }

    } = req.body

  const teammateName = await getTeammateInfo(teammateId); // this works fine
  const slackTeammateId = await slackID(teammateName.email) // this is where it fails I need to get the values from 'teammateName' in order for the function slackID to work


  ...

 } catch (error) {
    console.error(error)
    res.status(500)
    res.json({ error: error })
  }

}

我試過 Promise.all

const [teammateName, slackTeammateId] = await Promise.all([
  getTeammateInfo(teammateId), 
  slackID(teammateName.email)
])

但我無法理解它應該如何工作。

謝謝你。

Promise.all()的問題在於它同時觸發兩個函數並等待兩個函數完成,所以你不能這樣鏈接。

let teammateName
let slackTeammateId
getTeammateInfo(teammateId).then(r => {
teammateName = r
slackID(teammateName.email).then(r2 => {
slackTeammateId = r2
)}
);

另一方面, then()方法等到您的方法返回,然后觸發回調 function 中的所有內容。
希望它對您有所幫助,並為我糟糕的英語感到抱歉:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM