Rumah > hujung hadapan web > tutorial js > Mengapa Rujukan Firebase Saya Tidak Ditakrifkan di Luar Fungsi `sekali()`?

Mengapa Rujukan Firebase Saya Tidak Ditakrifkan di Luar Fungsi `sekali()`?

Mary-Kate Olsen
Lepaskan: 2024-11-07 12:54:02
asal
1077 orang telah melayarinya

Why is My Firebase Reference Undefined Outside the `once()` Function?

Mengapa Rujukan Firebase Hilang di Luar Fungsi once()

Apabila mendapatkan semula data daripada Firebase menggunakan fungsi once() dengan AngularJS, adalah mungkin untuk menghadapi isu di mana rujukan menjadi tidak ditentukan apabila digunakan di luar skop fungsi. Ini disebabkan oleh sifat tak segerak pengambilan data Firebase.

Dalam coretan kod yang disediakan, pernyataan console.log(userList) selepas melampirkan pendengar Firebase kembali tidak ditentukan. Ini kerana proses mendapatkan data tidak lengkap apabila pembolehubah senarai pengguna ditetapkan.

Penyelesaian:

Terdapat beberapa pendekatan untuk menyelesaikan isu ini:

Gunakan Senarai Pengguna dalam Panggilan Balik:

Akses senarai pengguna secara tak segerak dalam panggilan balik sekali() fungsi. Ini memastikan pengambilan data selesai sebelum meneruskan.

ref.once('value', function(snapshot) {
    users = snapshot.val();
    // ... Process and log user data within the callback ...
});
Salin selepas log masuk

Kembalikan Janji:

Kembalikan janji daripada fungsi getUsers() yang menyelesaikan dengan pengguna data setelah pengambilan selesai. Ini membolehkan kod berantai yang lebih bersih.

this.getUsers = function() {
    var ref = firebase.database().ref('/users/');
    return ref.once('value').then(function(snapshot) {
        // ... Process and return user data ...
    }).catch(function(error){
        alert('error:  ' + error);
    });
}
Salin selepas log masuk

Gunakan Async/Await (ES2017):

Dengan ES2017, anda boleh menggunakan sintaks async/wait untuk membuat kod tak segerak lebih seperti segerak. Fungsi getUsers() hendaklah ditandakan sebagai async:

this.getUsers = async function() {
    var ref = firebase.database().ref('/users/');
    return ref.once('value').then(function(snapshot) {
        // ... Process and return user data ...
    }).catch(function(error){
        alert('error:  ' + error);
    });
}
Salin selepas log masuk

Kemudian, panggil fungsi getUsers() menggunakan async/wait:

async function getAndLogUsers() {
    const userList = await userService.getUsers();
    console.log(userList);
}
Salin selepas log masuk

Memahami sifat tak segerak bagi pengambilan data Firebase adalah penting untuk mengelakkan masalah sedemikian. Pendekatan yang digariskan di atas menyediakan penyelesaian yang berkesan untuk mengakses data Firebase dengan pasti, memastikan rujukan diselenggara dengan betul.

Atas ialah kandungan terperinci Mengapa Rujukan Firebase Saya Tidak Ditakrifkan di Luar Fungsi `sekali()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan