【发布时间】:2019-02-16 17:20:14
【问题描述】:
我仍然是 dart Flutter 的初学者,现在我正在尝试从 REST API 和 socket.IO 检索数据。这时候我有一个困惑的问题,我已经尝试在互联网上搜索3天,但没有解决方案。我有 async 和 await 脚本,但是我添加的函数 await 没有给出任何响应并且仍然暂停。
假设我有两个不同的文件,第一个是主文件,第二个是辅助文件。
main.dart
Future<List<ChatTile>> fetchChat(socketutil,id) async {
socketutil.join(id); //STACK IN HERE
SharedPreferences prefs = await SharedPreferences.getInstance();
String messagePrefs = prefs.getString('messagePrefs');
print("DUA");
return await compute(parseListChat, messagePrefs);
}
helper.dart
Future<void> join(String id_room) async {
String jsonData ='{"room_id" : "$id_room","user_id" : "5a91687811138e74009839c9","user_name" : "Denis Muhammad Ramdan","user_photo" : "photo.jpg","user_status" : "1"}';
socketIO.sendMessage("join", jsonData, null);
//subscribe event
return await socketIO.subscribe("updateMessageList", (result) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString('messagePrefs', result);
print('SATU');
return await result;
});
}
我的问题是我的代码有问题,最好的方法是什么?
非常感谢,
【问题讨论】:
-
看起来您希望
return await result;从join(...)返回,但实际上并非如此。它只是从您传递给subscribe(...)的回调中返回。我不知道socketIO到底是什么或socketIO.subscribe()返回什么,但订阅听起来像返回的 Future 可能只会在连接关闭时返回,这可能永远不会,这就是为什么compute()永远不会完成。 -
感谢@Günter Zöchbauer 的回答,我已经尝试添加
awaitbehind socketutil.join (id);就像这样等待socketutil.join (id);但代码仍然暂停并且不会继续下一次执行。处理这种情况的最佳方法是什么? -
正如我所说,我不知道
socketIO.subscribe()返回什么,所以很难提出建议。我的假设是socketIO.subscribe()永远不会完成,所以等待对您没有帮助。
标签: dart async-await flutter