[英].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.