0

Firebase 参照をループしようとしています。動作しますが、何らかの理由で forEach ループが参照内のオブジェクトよりも 1 回多く実行されます。これにより、Promise.all() 関数が失敗し、promise 全体が失敗します。これが私のコードです。何が間違っているのかわかりません。

return userReceiptMetrics.child(userID).child('postItemIDs').orderByChild('itemID').equalTo(oldProductID).once('value', function(oldSnapshot) {
            var oldPostItemIDs = [];
            var metrics = oldSnapshot.val()

            if (oldSnapshot.val() != null) {
                return Promise.all(oldSnapshot.forEach(function(record) {
                    console.log(record.val());
                    var oldKey = record.key;
                    var newKey = oldKey.replace(oldProductID, newProductID);
                    var data = record.val();
                    oldPostItemIDs.push(oldKey);
                    data.itemID = newProductID;
                    updateObject['userReceiptMetrics/'+userID+'/postItemIDs/'+newKey] = data;
                    updateObject['userReceiptMetrics/'+userID+'/postItemIDs/'+oldKey] = null;
                })).then(function() {
                    return Promise.all(oldPostItemIDs.map(function(oldPostItemID) {
                        return userReceiptMetrics.child(userID).child('postItems').child(oldPostItemID).then(function(oldPostItem) {
                            var oldKey = oldPostItem.key
                            var newKey = oldKey.replace(oldProductID, newProductID)
                            var data = record.val()                        
                            updateObject['userReceiptMetrics/'+userID+'/postItems/'+newKey] = data;
                            updateObject['userReceiptMetrics/'+userID+'/postItems/'+oldKey] = null;

                            progress(38);
                        });
                    }))
                }).catch(function(error) {
                    console.log('fudge louise');
                });
            }
        });

コンソール出力は次のとおりです。

 App listening on port 8080
Press Ctrl+C to quit.
FIREBASE WARNING: Using an unspecified index. Consider adding ".indexOn": "_state" at /productUpdateQueue/tasks to your security rules for better performance 
FIREBASE WARNING: Using an unspecified index. Consider adding ".indexOn": "_state" at /productUpdateQueue/tasks to your security rules for better performance 
{ date: '2016-12-21 22:05:03',
  itemID: 'Macys-EReceipts-MENS HOSIERY-Size(No size provided)-Color(No color provided)-786888403743',
  postID: '-KZbmaThvxNmrvHwh_mc' }
{ date: '2016-12-21 22:05:03',
  itemID: 'Macys-EReceipts-MENS HOSIERY-Size(No size provided)-Color(No color provided)-786888403743',
  postID: '-KZbxAUcwzcP28C91EZA' }
FIREBASE WARNING: Using an unspecified index. Consider adding ".indexOn": "itemID" at /userReceiptMetrics/HeQST8hSkoPUmkBiVDR0tpSPo0x2/postItemIDs to your security rules for better performance 
fudge louise
4

1 に答える 1