Rumah >hujung hadapan web >tutorial js >Mengapa Panggilan Balik Memudaratkan dalam Rantai Janji AngularJS?

Mengapa Panggilan Balik Memudaratkan dalam Rantai Janji AngularJS?

Patricia Arquette
Patricia Arquetteasal
2024-11-13 05:08:02398semak imbas

Why are Callbacks Detrimental in AngularJS Promise Chains?

Mengapa Menggunakan Panggilan Balik dalam AngularJS Promise Chains Memudaratkan

Ia sering dicadangkan untuk menyediakan fungsi panggil balik kepada perkhidmatan AngularJS, seperti yang dilihat dalam coretan kod di bawah:

app.controller('tokenCtrl', function($scope, tokenService) {
    tokenService.getTokens(function callbackFn(tokens) {
        $scope.tokens = tokens;
    });
});

Walau bagaimanapun, amalan ini tidak digalakkan sebagai Anti-Corak. Perkhidmatan AngularJS seperti janji pengembalian $http dan melampirkan kaedah panggil balik pada kaedah .then mereka membentuk penyongsangan kawalan yang tidak diingini.

Refactoring

Untuk membetulkan isu ini, ubah suai kod seperti berikut:

app.controller('tokenCtrl', function($scope, tokenService) {
    tokenService.getTokens()
        .then(function(response) {
            $scope.tokens = response.data;
        });
});

Dalam perkhidmatan modul:

app.factory('tokenService', function($http) {
    var getTokens = function() {
        return $http.get('/api/tokens');
    };

    return {
        getTokens: getTokens
    };
});

Pemfaktoran semula ini menghapuskan fungsi panggil balik dan mengekalkan aliran kawalan yang diingini melalui kaedah .then.

Justifikasi untuk Pemfaktoran Semula

Panggilan balik seperti yang dilaksanakan dalam kod asal:

  • Halang rantaian selanjutnya pengendali kejayaan/ralat.
  • Alih kawalan ke atas pengendalian tindak balas daripada modul pemanggil kepada modul yang dipanggil.
  • Perkenalkan kerumitan janji sambil menggunakannya sebagai panggilan balik secara serentak. Paradoks ini menyebabkan kod mengelirukan.

Atas ialah kandungan terperinci Mengapa Panggilan Balik Memudaratkan dalam Rantai Janji AngularJS?. 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