1

我想在本地存储中存储一个令牌,如果它存在,稍微调整一下,然后在页面上使用它。

使用 ionic 1,很容易创建一个从本地存储中获取数据、更改并返回数据的服务,以便主要组件可以随意使用它。

但是现在 NativeStorage.getItem() 返回一个承诺,我如何强制服务完全完成获取项目,并在将调整后的令牌作为数据返回之前完成我的其他更改?

我希望能够做到:

export class Test{
    let tok = "";
    constructor(tokenService:TokenService){
       this.tok = tokenService.getToken()
    }

    ngOnInit(){
      alert(this.tok + " Is your token");
    }
}

在 tokenService 中,提供者有:

getToken(){
// this doesn't work now because it will return undef for modified_token not waiting for the promise to finish
    let modified_token:string; 
    NativeStorage.getItem('token').then(
        data=>{ 
            modified_token = data + 'modified'; 
        }
    ); 
    return modified_token
}

我是否只需要在承诺完成时调用另一个主函数?

喜欢:

getToken(){
    return NativeStorage.getItem('token')
}

而不是在 ngOnInit 的构造函数中有:

ngOnInit(){
 tokenService.getToken().then(
    data => { 
        let modified_token = data + "modified";
        mainAction(modified_token);
    })
}

mainAction() 还有我想做的其余部分吗?

4

1 回答 1

2

我是否只需要在承诺完成时调用另一个主函数?

这是一种方法。getToken您还可以通过返回一个新的 Promise将所有相关逻辑保留在方法中,如下所示:

getToken(){
   return NativeStorage.getItem('token').then(data => return data + 'modified')
}

接着

ngOnInit(){
 tokenService.getToken().then(
    modifiedToken => { 
        mainAction(modifiedToken);
    })
}

更新:根据@SamMason 评论更新了答案。

于 2016-10-06T11:13:40.157 回答