Я знаю, что подобные вопросы задавались. Но я объясню разницу.
У меня есть функция с именем login()
, которая должна возвращать пользователя. Эта функция вызывает другую функцию, которая вызывает мой бэкэнд. Функция login()
должна дождаться завершения обещания, прежде чем вернуть пользователя. Проблема в том, что если я вставлю возврат в then()
, он скажет:
[ts] Функция, объявленный тип которой не является ни void, ни any
вернуть значение.
Его нужно вернуть, потому что вызывающей его функции потребуется JWT пользователя.
Упрощенный код:
login(user: User): User {
this.user = user;
//in between I fill some fields for the user
this.loginPromise().then(user => {
return user;
})
.catch(err => {
console.log(err);
//it doesn't make a difference wether I return a user here or not
}
loginPromise(): Promise<{}> {
var promise = new Promise(function(resolve, reject) {
this.restProvider.login(this.user)
.subscribe(result => {
const jwt = result.headers.get('JWT');
const config = { ... result.body };
if(config['result'] != 'failed'){
this.user.$JsonWebToken = jwt;
this.user.$passwordIsValid = true;
this.user.$usernameIsValid = true;
resolve(this.user);
}
}, err => {
console.log("error: " + err);
reject(err);
});
})
return promise;
}