如何从正在dart中侦听某个流的函数返回字符串?
我有一个名为foo的函数,它正在监听stdout,我想要的是返回我从stdout得到的一些字符串。这是我的职责如何从正在dart中侦听某个流的函数返回字符串?,dart,stdout,Dart,Stdout,我有一个名为foo的函数,它正在监听stdout,我想要的是返回我从stdout得到的一些字符串。这是我的职责 dynamic foo(process) { return ( process.stdout.transform(UTF8.decoder).listen((data) { String s = data.toString(); // print(s); if (s.contains("received event of")) {
dynamic foo(process) {
return (
process.stdout.transform(UTF8.decoder).listen((data) {
String s = data.toString();
// print(s);
if (s.contains("received event of")) {
var s1 = s.split(":");
print("${s1[1]}");
return s1[1];
}
}));
}
我想将s1返回到调用函数这应该是您想要的
Future<String> dynamic foo(process) {
return process.stdout.transform(UTF8.decoder).map((data) {
String s = data.toString();
// print(s);
if (s.contains("received event of")) {
var s1 = s.split(":");
print("${s1[1]}");
return s1[1];
} else {
return null;
}
}).where((val) => val != null).first;
}
这里有一个回调函数来实现这个技巧
foo(process, callback) {
process.stdout.transform(UTF8.decoder).listen((data) {
String s = data.toString();
if (s.contains("received event of")) {
String message = s.split(":")[1];
callback(message);
}
});
}
在这里,我调用这个方法并打印从流中获取的数据
foo(process,(data){print(data);})
我认为每个人都希望这样:
import 'dart:io';
import 'dart:convert';
// Using system encoding:
var outputStr = await process.stdout.transform(systemEncoding.decoder).join();
// Using UTF-8 encoding:
var outputStr = await process.stdout.transform(utf8.decoder).join();
我明白你的意思,但以后只返回一次,但只要数据可用,我就返回到调用的函数。嗯,我得到了一个解决方案,我现在正在分享它,顺便说一句,感谢您的响应。请先删除
。首先将返回类型固定为Stream
,并在调用站点上使用。请收听(…)
或等待(foo(proc)的var输入){…}
获取这个类“\u Future”没有实例方法“listen”。
听起来好像你没有删除。首先
对不起,我的返回类型不好,做得很好,谢谢你的修复。老实说,这很难看。这正是Dart通过提供流来避免的someStream.listen(callback)
允许您以一种通用和可组合的方式使用它,并提供诸如where
等操作符来处理事件。有关更多详细信息,请参见我答案下面的最后一条评论。
import 'dart:io';
import 'dart:convert';
// Using system encoding:
var outputStr = await process.stdout.transform(systemEncoding.decoder).join();
// Using UTF-8 encoding:
var outputStr = await process.stdout.transform(utf8.decoder).join();