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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 12:54:02986semak imbas

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 ...
});

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);
    });
}

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);
    });
}

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

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

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!

Kenyataan:
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