关于使用Google OAuth库的DartWatch blog教程。问题是如何处理:Google的“拒绝访问”错误?
这是我的代码示例:
class Client
{
GoogleOAuth2 _auth;
Client()
{
_auth = new GoogleOAuth2(
'5xxxxxxxxxxxxxx.apps.googleusercontent.com', // Client ID
['openid', 'email', 'profile'],
tokenLoaded:oauthReady);
}
void doLogin()
{
// _auth.logout();
// _auth.token = null;
try
{
_auth.login();
}
on AuthException {
print('Access denied');
}
on Exception catch(exp)
{
print('Exception $exp occurred');
}
}
void oauthReady(Token token)
{
print('Token is: $token');
}
}
但我从未在任何(!)异常上遇到catch
阻止。我做错了什么?
我正在使用:
Dart编辑器版本0.5.0_r21823
Dart SDK版本0.5.0.1_r21823
答案 0 :(得分:1)
你永远不会碰到catch块,因为auth.login
是一个返回Future的异步操作。
有great article on Future error handling on the dartlang.org
website。
auth.login
returns a Future,但它在控制返回事件循环后会发生的工作(有关事件循环的更多信息,请参阅my answer to another question。)
您的代码应该更像:
/// Returns a Future that completes to whether the login was successful.
Future<boolean> doLogin()
{
_auth.login()
.then((_) {
print("Success!");
return true;
}.catchError((e) {
print('Exception $e occurred.');
return false; // or throw the exception again.
}
}