如何 return 来自正在监听 dart 中某些流的函数的字符串?
how to return a string from a function which is listening some stream in dart?
我有一个名为 foo 的函数,它正在监听标准输出,我想要的是 return 我从标准输出获得的一些字符串。这是我的功能;
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];
}
}));
}
我想return 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;
}
您的自定义代码 returns 有效值或 null
。
我将 listen
更改为 map
以便能够使用其他流方法。
where
过滤无效值 (null
) 和 returns 第一个非 null
值。
foo
方法的调用者需要处理返回的 Future
(例如使用 async
/await
)以在可用时获取值。
像使用它
bar() async {
...
var input = await foo(proc);
print(input);
}
这里有一个回调函数可以解决问题
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();
我有一个名为 foo 的函数,它正在监听标准输出,我想要的是 return 我从标准输出获得的一些字符串。这是我的功能;
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];
}
}));
}
我想return 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;
}
您的自定义代码 returns 有效值或 null
。
我将 listen
更改为 map
以便能够使用其他流方法。
where
过滤无效值 (null
) 和 returns 第一个非 null
值。
foo
方法的调用者需要处理返回的 Future
(例如使用 async
/await
)以在可用时获取值。
像使用它
bar() async {
...
var input = await foo(proc);
print(input);
}
这里有一个回调函数可以解决问题
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();