0

firebaseのドキュメントでは、firebaseデータベースからデータを取得する簡単な方法は見つけられませんでした。イベント(.on、.once)のみでデータを取得しました。これが唯一の方法ですか?FirebaseのCloud関数でdbデータを読み込み

この場合、異なるブランチからデータを取得するには、ハンドラにハンドラを記述する必要がありますか? response.send()は最も深いハンドラになければなりませんか?

これは正しい機能ですか?

exports.test = functions.https.onRequest((request, response) => { 
var db = admin.database(); 

db.ref("test/val").once("value", snap => { 
    var val1 = snap.val(); 
    db.ref("test/val").set(val1+1); 
    db.ref("test2/val").once("value", snap => { 
     var val2 = snap.val(); 
     response.send(val1+", "+val2); 
    }); 
}); 

//response.send("bad way"); 
}); 

答えて

0

あなたは近いですが、あなたは、あなたが(あなたのsetが上待っれません)を完了するためにすべての非同期の作業を待つことを確認する必要があります。コールバックの代わりに約束を使用して、フローを明確にするために少し修正しました:

exports.test = functions.https.onRequest((request, response) => { 
    var db = admin.database(); 

    var val1, val2; 
    db.ref("test/val").once("value").then(snap => { 
    val1 = snap.val(); 
    return db.ref("test/val").set(val1+1); 
    }).then(() => { 
    return db.ref("test2/val").once("value'); 
    }).then(snap => { 
    val2 = snap.val(); 
    response.send(val1+", "+val2); 
    }).catch(err => { 
    console.log(err); 
    response.send("error occurred"); 
    }); 
}); 
関連する問題