簡體   English   中英

.then未在devicesIsReady上定義

[英].then is not defined on devicesIsReady

我收到以下錯誤:

未被捕獲的TypeError:loginService.verificarSesion(...)。then不是一個函數

我想我不太了解諾言

我需要檢查用戶是否在我的apache-cordova應用程序的deviceIsReady上登錄。 這是功能的一部分:

.run(function($ionicPlatform, $http, $state, loginService) {
    $ionicPlatform.ready(function() {

        loginService.verificarSesion()
            .then(function(usuario) {
                if(usuario == 1){
                    //es complejo
                    $state.go('app.home');
                }
                else if(usuario == 2){
                    //es usuario comun
                    $state.go('app.home-usuario');
                }
                else{
                    //no se renococió ningún usuario válido
                    $state.go('app.login');
                }
            })
            .catch(function(e){
               console.log('error trying to find the user');
            });
    });
})
.config(function($urlRouterProvider) {
    // if none of the above states are matched, use this as the fallback
    $urlRouterProvider.otherwise('/app/login');
});

服務:

(function() {
    'use strict';

    angular
        .module('example.login')
        .factory('loginService', loginService);

    loginService.$inject = ['$http','remoteDataService', '$q','_','localStorageService'];

    /* @ngInject */
    function loginService($http, remoteDataService, $q,_, localStorageService){ 
        var token = 'token';
        var usuario = 'usuario';

        var service = {
            verificarSesion: verificarSesion
        };
        return service;

        //funcion para saber si hay una sesión activa
        function verificarSesion() {
            var usuariologueado = localStorageService.get(token) || [];
            if (usuariologueado == []){
                return [];
            }
            return localStorageService.get(usuario);
        }

        //generar error si hubo un problema
        function generarError(e){
            if (e.message) {
                return $q.reject(e.message);
            }
            return $q.reject('Hubo un problema al conectarse al servidor. Intente nuevamente.');
        }

    }
})();

如果用戶已登錄,則必須將該用戶引導到另一個視圖。

我做錯了什么? 謝謝!

在您的代碼中很明顯,函數verificarSesion可以返回一個空數組,當然,數組沒有.then()方法。

根據此處的文檔,您對localStorageService.get(usuario)調用將返回您存儲在localStorage中的任何值。 您確定使用密鑰'usuario'存儲Promise嗎?

我想您需要這樣的東西:

    function verificarSesion() {
        var usuariologueado = localStorageService.get(token) || [];

        if (usuariologueado == []){
            return new Promise(function (res, rej) {
                $http
                    // change this if you need to post application/x-www-form-urlencoded
                    .post('login_url', {username: usuario, password: 'abc'})
                    .then(
                        function (resp) {
                            // initiate the session in the localStorage
                            localStorageService.set(usuario, resp.data);
                            res(localStorageService.get(usuario));
                        },
                        function(err) {
                            // error occured, notify user
                            rej(err);
                        }
                    );
            });
        }
        return new Promise(function (res, rej) {
            // resolve immediately
            res(localStorageService.get(usuario));
        });
    }

上面的代碼還有很多問題,例如, usuariologueado用於什么? 什么是token 為什么為什么直接從localStorage獲取用戶會話,似乎是username 等等

如果要進行用戶會話,可以查看sessionStorage而不是localStorage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM