【问题标题】:ESOCKETTIMEDOUT Cloud Functions for Firebase适用于 Firebase 的 ESOCKETTIMEDOUT 云函数
【发布时间】:2017-09-13 00:53:16
【问题描述】:

我将 Cloud Functions for Firebase 与我的 Firebase 实时数据库一起使用,以便对我的应用进行一些数据管理。

我的一个功能似乎已终止,因为它需要大约 100-150 秒才能完成。这会发生错误:ESOCKETTIMEDOUT

有没有办法防止这种情况发生?

这是我的功能:

function getTopCarsForUserWithPreferences(userId, genres) {
  const pathToCars = admin.database().ref('cars');

  pathTocars.orderByChild("IsTop").equalTo(true).once("value").then(function(snapshot) { 
      return writeSuggestedCars(userId, genres, snapshot);
  }).catch(reason => {
    console.log(reason)
  })
}

function writeSuggestedCars(userId, genres, snapshot) {
    const carsToWrite = {};
    var snapCount = 0
    snapshot.forEach(function(carSnapshot) {
        snapCount += 1
        const carDict = carSnapshot.val();
        const carGenres = carDict.taCarGenre;
        const genre_one = genres[0];
        const genre_two = genres[1];

        if (carGenres[genre_one] === true ||carGenres[genre_two] == true) {
            carsToWrite[carSnapshot.key] = carDict
    }

        if (snapshot.numChildren() - 1 == snapCount) {
            const pathToSuggest = admin.database().ref('carsSuggested').child(userId);
            pathToSuggest.set(carsToWrite).then(snap => {

            }).catch(reason => {
            console.log(reason)
             });
        }
    });
}

getTopCarsForUserWithPreferences 在用户添加首选项时被调用。 cars 表也有大约 50k 个条目。

【问题讨论】:

    标签: node.js firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    你需要在每次使用异步任务时返回。

    编辑:您返回“writeSuggestedCars”,但我认为它永远不会返回值。我没有编译器,但我认为它是返回 Promise.resolved()。你能把它插到我放“这里”的地方吗?

    也许这会起作用:

    function getTopCarsForUserWithPreferences(userId, genres) {
      const pathToCars = admin.database().ref('cars');
    
      return pathTocars.orderByChild("IsTop").equalTo(true).once("value").then(function(snapshot) { 
          return writeSuggestedCars(userId, genres, snapshot);
      }).catch(reason => {
        console.log(reason)
      })
    }
    
    function writeSuggestedCars(userId, genres, snapshot) {
        const carsToWrite = {};
        var snapCount = 0
        snapshot.forEach(function(carSnapshot) {
            snapCount += 1
            const carDict = carSnapshot.val();
            const carGenres = carDict.taCarGenre;
            const genre_one = genres[0];
            const genre_two = genres[1];
    
            if (carGenres[genre_one] === true ||carGenres[genre_two] == true) {
                carsToWrite[carSnapshot.key] = carDict
        }
    
            if (snapshot.numChildren() - 1 == snapCount) {
                const pathToSuggest = admin.database().ref('carsSuggested').child(userId);
                return pathToSuggest.set(carsToWrite).then(snap => {
                    // 'HERE' I think return promise/Promise.resolve() will work
                }).catch(reason => {
                console.log(reason)
                 });
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-31
      • 2021-10-18
      • 2019-01-18
      • 2021-02-13
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      相关资源
      最近更新 更多