angular.js - angular $q问题
高洛峰
高洛峰 2017-05-15 17:06:27
0
2
559
function getMenus() {
    if (!localStorage.getItem('menus')) {
        var defer = $q.defer();
        $http.get('api/menu').success(function (res) {
            // scope.menuList = res;
            localStorage.setItem('menus', res)
            defer.resolve();
            return defer.promise;
        }).error(function (err) {
            defer.reject()
            return defer.promise;
        });

    }
}
getMenus().then(function () {
    scope.menuList = localStorage.getItem('menus')
})

返回结果是angular.min.js:107 TypeError: Cannot read property 'then' of undefined

请问哪里错了。。。。。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
滿天的星座

L'erreur est signalée car la fonction getMenus n'a pas de valeur de retour, js renvoie undéfini par défaut, puis se déclenche sur undéfini, donc l'erreur est signalée
Solution :

Initialiser dans la première ligne de getMenus

var defer = $q.defer()

Enfin, renvoyez defer.promise comme valeur de retour
Cela devrait être le résultat final

function getMenus() {
    var defer = $q.defer()
    if (...) {...}
    return defer.promise
}

Bien sûr, il y aura des problèmes si vous renvoyez des promesses dans les rappels de réussite et d'erreur

巴扎黑
function getMenus() {

    var defer = $q.defer();
    
    if (!localStorage.getItem('menus')) {
        
        $http.get('api/menu').success(function (res) {
            // scope.menuList = res;
            localStorage.setItem('menus', res)
            defer.resolve();
        }).error(function (err) {
            defer.reject()
        });

    }
    
    return defer.promise;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal