2017-11-13 8 views
-1

私はGoogle Cloud Functionを使用していますが、古いバージョンのNodeで動作しているので、もうthis答えは使用できません。コレクション内のすべてのドキュメントをバッチ処理してそこからデータを返す関数が必要です。これは私の試みです:削除されたドキュメントデータを返すと未定義です

function deleteCollectionAndReturnResults(db, collectionRef, batchSize) { 
    var query = collectionRef.limit(batchSize); 
    return deleteQueryBatch(db, query, batchSize, []); 
} 

function deleteQueryBatch(db, query, batchSize, results) { 
    return query.get().then(snapshot => { 
    if (snapshot.size == 0) return 0; 
    var batch = db.batch(); 
    snapshot.docs.forEach(doc => { 
     if (doc.exists) {results.push(doc);} 
     batch.delete(doc.ref); 
    }); 
    return batch.commit().then(() => snapshot.size); 
    }).then(function(numDeleted) { 
    if (numDeleted >= batchSize) { 
     return deleteQueryBatch(db, query, batchSize, results); 
    }else{ 
     return results 
    } 
    }); 
} 

しかし、私はこのようにそれを実行します。

exports.tester = functions.firestore.document('x/{x}').onCreate(event => { 
     deleteCollectionAndReturnResults(db, db.collection("x"), 100).then(docs => { 
     console.log(docs) 
     }) 
}) 

これが私の出力である:私は得るか、なぜ

enter image description here

は、何か問題はあります'関数は未定義を返しました'?

答えて

1

tester関数は何も返しません。代わりに、すべての作業が完了したときに解決される約束を返すべきです。約束を返すことを忘れてしまったようです。deleteCollectionAndReturnResults

exports.tester = functions.firestore.document('x/{x}').onCreate(event => { 
    return deleteCollectionAndReturnResults(db, db.collection("x"), 100).then(docs => { 
     console.log(docs) 
    }) 
}) 
関連する問題