Mat*_*res 7 javascript asynchronous angularjs
我正在和Angular合作.我有一个名为UserService的服务,用于处理登录,身份验证和用户数据请求.
该GET方法需要检查用户是否有一个有效的(未过期)认证使得之前令牌get请求.因此,如果有,则发出请求,如果没有,请求令牌然后发出请求.
此get方法需要隐藏其复杂请求.它必须只返回一个Promise,因为它只发出一个请求.
所以,一个用法的例子:
UserService
.get()
.then(data => { ... })
.catch(error => { ... })
Run Code Online (Sandbox Code Playgroud)
检查令牌是否已过期.如果是,则返回刷新令牌的请求,然后生成并返回get请求.如果不是,只需创建并返回get请求.如下:
function get() {
if (isTokenExpired(token))
return $http
.post(url + '/refreshtoken', 'token=' + refreshToken)
.then(response => {
token = response.data.token
return $http.get(url + '?token=' + token)
})
.catch(response => { ... })
else
return $http.get(url + '?token=' + token)
}
Run Code Online (Sandbox Code Playgroud)
但它正在回复我将要处理的承诺:
UserService
.get()
.then(request => {
request // THAT IS NOT GOOD
.then(data => { ... })
.catch(error => { ... })
})
.catch(error => { ... })
Run Code Online (Sandbox Code Playgroud)
像使用示例一样!
如何在服务上创建这个get方法,它处理这样的身份验证并隐藏将要使用的控制器中的所有内容,让它在使用示例中使用它?
\n\n\n但它返回了一个承诺,我必须这样处理:
\n\nRun Code Online (Sandbox Code Playgroud)\nUserService.get().then(request => { request.then(data => { \xe2\x80\xa6 }) })\n
不。
\n\nPromise do chain,任何“承诺的承诺”都将隐式地扁平化为内部结果的承诺。您的“错误解决方案”代码只是按原样工作。
\n| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |