Flutter如何处理async/await中的错误

Ton*_*y M 5 error-handling asynchronous async-await dart flutter

如果应用程序无法连接到服务器(例如,如果服务器已关闭),我想捕获异常,但不确定如何连接并且到目前为止尚未成功。

\n

我的代码:

\n
static\xc2\xa0Future<String>\xc2\xa0communicate(String\xc2\xa0img,\xc2\xa0String\xc2\xa0size)\xc2\xa0async\n{\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n    String\xc2\xa0request\xc2\xa0=\xc2\xa0size.padLeft(10,\xc2\xa0'0')\xc2\xa0+\xc2\xa0img;\n    Socket\xc2\xa0_socket;\n\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0await\xc2\xa0Socket.connect(ip,\xc2\xa09933).then((Socket\xc2\xa0sock) \n    {\n        _socket\xc2\xa0=\xc2\xa0sock;\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}).then((_)\n    {\n        //Send\xc2\xa0to\xc2\xa0server\n        _socket.add(ascii.encode(request));\n        return\xc2\xa0_socket.first;\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}).then((data)\n    {\n        //Get\xc2\xa0answer\xc2\xa0from\xc2\xa0server\n        response\xc2\xa0=\xc2\xa0\xc2\xa0ascii.decode(base64.decode(new\xc2\xa0String.fromCharCodes(data).trim()));\n    });\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0return\xc2\xa0response;\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\n}\n
Run Code Online (Sandbox Code Playgroud)\n

函数调用:

\n
var ans = await communicate(bs64Image, size);\n
Run Code Online (Sandbox Code Playgroud)\n

Wil*_*ill 8

一般来说,您可以使用 async/await 处理这样的错误:

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // exception handling code 
}  
catch Exception2 { 
   //  exception handling 
}  
finally { 
   // code that should always execute; irrespective of the exception 
}
Run Code Online (Sandbox Code Playgroud)

对于你的情况,你应该尝试这样的事情:

try {
   var ans = await communicate(bs64Image, size);
}
catch (e){
   print(e.error);
}
finally {
print("finished with exceptions");
}
Run Code Online (Sandbox Code Playgroud)