我想在方法中等待,直到承诺返回。
public loginOffline(username: string, password: string) {
return this.database.getItem('currentUser', 'login').then(data => {
this.userLogin = data;
console.log(username + ' ' + this.userLogin.username + ' ' + password + ' ' + this.userLogin.password);
if (username === this.userLogin.username && password === this.userLogin.password) {
return true;
} else {
return false;
}
}).catch(err => {
return false;
});
}
/********* call the method and descide what to do **************/
if (loginOffline('myname', 'mypassword'){
// Do something.....
} else {
// Do something else .....
}
......
这不起作用。调用此loginOffline方法的方法只是想知道登录是否成功。我尝试了很多东西,但没有成功。
任何人都可以提供帮助。非常感谢 干杯
答案 0 :(得分:5)
您只需将承诺与另一个then
联系起来。
这样打电话:
loginOffline('myname', 'mypassword').then(result =>{
if(result){
//do something
}else{
//do something else
}
})
更多关于promise chaining
答案 1 :(得分:4)
您可以使用Promise
对象,如下所示:
public loginOffline(username: string, password: string) {
return this.database.getItem('currentUser', 'login').then(data => {
this.userLogin = data;
console.log(username + ' ' + this.userLogin.username + ' ' + password + ' ' + this.userLogin.password );
if (username === this.userLogin.username && password === this.userLogin.password) {
return true;
} else {
return false;
}
}).catch(err => {
return false;
});
}
loginOffline('myname', 'mypassword').then((result) => {
if(result) {
// true was returned
} else {
// false was returned
}
})
答案 2 :(得分:1)
@suraj的答案是正确的,只需在返回的结果周围使用另一个.then()
,但另一种方法是使用await
/ async
关键字来重写代码。
public async loginOffline(username: string, password: string) {
try {
this.userLogin = await this.database.getItem('currentUser', 'login');
} catch(e) {
return false;
}
console.log(username + ' ' + this.userLogin.username + ' ' + password + ' ' + this.userLogin.password );
return (
username === this.userLogin.username &&
password === this.userLogin.password);
}
// This code must also be inside a function marked as 'async':
/********* call the method and descide what to do **************/
if(await loginOffline('myname', 'mypassword'){
// Do something.....
} else {
// Do something else .....
}
......
请注意,每个async
函数会自动将它返回的任何内容转换为Promise,因此您必须在调用树的整个过程中使用async
。或者,如果由于某种原因您不想让调用者async
,您可以像以前一样对结果使用then
:
// If the caller cannot be marked `async`:
/********* call the method and descide what to do **************/
loginOffline('myname', 'mypassword').then(result => {
if (result) {
// Do something.....
} else {
// Do something else .....
}
});
......
答案 3 :(得分:0)
你可以在这里找到解决方案:
function GetUserPemission(){
return new Promise((resolve,reject)=>{
getdata().then((data)=>{
if(data){
resolve(true);
}else{
resolve(false);
}
}).catch((error)=>{
resolve(false);
})
})
}
function getdata(){
return new Promise((resolve,reject)=>{ setTimeout(()=>{resolve("Data")},100)})
}
GetUserPemission().then((data)=>{
alert(data);
});