Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase的异步/等待云函数,性能较慢_Javascript_Firebase_Async Await_Google Cloud Functions - Fatal编程技术网

Javascript Firebase的异步/等待云函数,性能较慢

Javascript Firebase的异步/等待云函数,性能较慢,javascript,firebase,async-await,google-cloud-functions,Javascript,Firebase,Async Await,Google Cloud Functions,我需要一些帮助和支持来解决Firebase云函数中的性能问题。我将async/await与try/catch块结合使用,以提高代码的可读性 我有一个简单的函数,它基于队列写入事件中的params键值,在数据库中的两个位置上进行写入 这个简单的功能平均需要1500毫秒才能完成。在我看来,对于一个简单的数据库写入任务来说似乎有点长。我认为我在代码中犯了一个错误,代码的一部分没有正确解析 云函数 更新 根据这些评论,我对代码做了一些改进。性能仍然相同,但代码看起来更好 云函数 鉴于您的代码看起来不错,

我需要一些帮助和支持来解决Firebase云函数中的性能问题。我将async/await与try/catch块结合使用,以提高代码的可读性

我有一个简单的函数,它基于队列写入事件中的params键值,在数据库中的两个位置上进行写入

这个简单的功能平均需要1500毫秒才能完成。在我看来,对于一个简单的数据库写入任务来说似乎有点长。我认为我在代码中犯了一个错误,代码的一部分没有正确解析

云函数

更新 根据这些评论,我对代码做了一些改进。性能仍然相同,但代码看起来更好

云函数


鉴于您的代码看起来不错,我没有看到任何不返回的代码路径,我只是使用async await进行了自己的测试,下面是我的结果:

代码更新和部署后的执行:1058ms 执行时间:120毫秒 执行时间:38毫秒 我怀疑您的功能正在冷启动。在代码更新后第一次执行函数时,Firebase需要设置环境,这在第一次执行时需要一段时间。当函数有一段时间没有使用时也会发生同样的情况

其中一位开发人员在此提供更多信息:


编辑:忘了提到我正在使用打字脚本。这意味着我的代码显然将被传输,因为Firebase本机还不支持async/await。我怀疑你也在做类似的事情。

不是答案,但不是如果!event.data.exists{return;}如果event.data.exists{有点多余的?event.params&&key=event.params.$key;对我来说似乎是语法错误。请使用适当的if语句。您应该删除所有这些try捕获。您实际上并没有在任何地方处理错误。您甚至知道您没有遇到超时或其他问题吗?您是否对特定部分进行过调试帽子长?@JaromandaX你完全正确。删除了那个代码块。
export const watchRegisterJobs = functions.database.ref(`queues/register/{$key}`).onWrite(
  async (event: Event<any>) => {
    if (!event.data.exists()) {
      return;
    }
    if (event.data.exists()) {
      const formData = event.data.val();
      let key;
      event.params&&(key=event.params.$key);

      if (key) {
        console.log('New user with the following id', key)
        try {
          await addUser(formData, key)
        } catch (error) {
          console.log('can not add user to database', error)
        }
        try {
          await addOrganization(formData, key)
        } catch (error) {
          console.log('can not add organization to database', error)
        }
        try {
         await event.data.ref.remove();
        } catch (error) {
          console.log('can not remove job')
        }
        return;
      }
    }
  }
)
export const addUser = async (data, key) => {

  const dataToSave = {
    information: ....,
    organizations: .....
  };

  try {
    return await admin.database().ref(`users/${key}`).set(dataToSave);
  } catch (error) {
    return error;
  }
}

export const addOrganization = async (data, key) => {
  const organization = {
    ...
  }
  try {
    return await admin.database().ref(`organizations/${key}`).set(organization);
  } catch (error) {
    return error;
  }
}
export const watchRegisterJobs = functions.database.ref(`queues/register/{$key}`).onWrite(
  async (event: Event<any>) => {
    if (!event.data.exists()) {
      return;
    }

    const formData = event.data.val();
    let key;
    if(event.params) {
      key = event.params.$key;
    }

    if (key) {
      console.log('New user with the following id', key)
      try {
        await addUser(formData, key)
        await addOrganization(formData, key)
        await event.data.ref.remove();
      } catch (error) {
        console.log('can not write to the database', error)
      }
      return;
    }
  }
) 
export const addUser = (data, key) => {

  const dataToSave = {
    information: ....,
    organizations: ....
  };

  return admin.database().ref(`users/${key}`).set(dataToSave);
}

export const addOrganization = (data, key) => {
  const organization = {
    ...
  }

  return admin.database().ref(`organizations/${key}`).set(organization);
}