gpt4 book ai didi

javascript - 为什么我的 javascript 运行时间很长?

转载 作者:行者123 更新时间:2023-12-03 00:13:43 25 4
gpt4 key购买 nike

我正在使用 Cloud Functions for Firebase,但我的某些函数出现超时。我对 JavaScript 还很陌生。看起来我需要在 promise 中放入 for ,但我遇到了一些问题。这个代码实际上下线得太早了,我认为他花了很长时间才做出这个。您有什么方法可以改进此代码并使代码更快吗?

exports.firebaseFunctions = functions.database.ref("mess/{pushId}").onUpdate(event => {
//first i get event val and a object inside a firebase
const original = event.data.val();
const users = original.uids; // THIS ITS ALL USERS UIDS!!

// so fist i get all users uids and put inside a array
let usersUids = [];
for (let key in users) {
usersUids.push(users[key]);
}

// so now i gonna make a promise for use all this uids and get token's device
//and save them inside a another child in firebase!!
return new Promise((resolve) => {
let userTokens = [];
usersUids.forEach(element => {
admin.database().ref('users/' + element).child('token').once('value', snapShot => {
if (snapShot.val()) { // if token exist put him inside a array
userTokens.push(snapShot.val());
}
})
})
resolve({
userTokens
})
}) // now i make then here, from get userTokens and save in another child inside a firebase database
.then((res) => {
return admin.database().ref("USERS/TOKENS").push({
userTokens: res,
})
})
})

最佳答案

您正在使用 firebase 发出网络请求,所以也许这就是它缓慢的原因。您为每个用户发出一个请求,因此如果您有 100 个 id,则可能需要一段时间。

但是我注意到另一个问题,那就是:您只是解析为一个空列表。要等待多个 Promise,请创建一个 Promise 数组,然后使用 Promise.all 创建一个并行等待所有 Promise 的 Promise。

当你调用resolve时,你已经完成了forEach,并且你已经启动了每个promise,但是它们还没有被添加到列表中。为了让它变得更好,将其机会映射到 map 并收集所有返回的 Promise,然后返回 Promise.all

关于javascript - 为什么我的 javascript 运行时间很长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com