String 从未来对象返回字符串
我试图通过localproxy获取html页面,以解析并从中获取URL。我在Dart找不到任何没有未来的图书馆。所以我很难从未来的对象返回字符串。下面是dart文件的完整代码String 从未来对象返回字符串,string,asynchronous,dart,future,String,Asynchronous,Dart,Future,我试图通过localproxy获取html页面,以解析并从中获取URL。我在Dart找不到任何没有未来的图书馆。所以我很难从未来的对象返回字符串。下面是dart文件的完整代码 import 'package:universal_html/driver.dart'; import 'package:universal_html/prefer_universal/html.dart'; String proxyUrl='http://localhost/php-proxy/index.php?q=
import 'package:universal_html/driver.dart';
import 'package:universal_html/prefer_universal/html.dart';
String proxyUrl='http://localhost/php-proxy/index.php?q=';
String hallTicketUrl='http://www.ignou.ac.in/ignou/studentzone/results/6';
Future<String> getList()async{
final driver = HtmlDriver();
await driver.setDocumentFromUri(Uri.parse(proxyUrl+hallTicketUrl));
final items = driver.document.querySelectorAll('.middleconten2column a');
Element urls=Element.tag('urls');
items.forEach((item)=>urls.append(Element.tag('url')
..setAttribute('href',item.getAttribute('href'))
..text=item.text
)
);
print('${items.length} items found');
return Future.value(urls.outerHtml);
}
String Handler(String app){
switch(app){
case 'list': return getList() as String;
}
return "";
}
main(){
print(Handler('list'));
}
import'包:universal_html/driver.dart';
导入“package:universal_html/preference_universal/html.dart”;
字符串proxyUrl=http://localhost/php-proxy/index.php?q=';
字符串hallTicketUrl=http://www.ignou.ac.in/ignou/studentzone/results/6';
Future getList()异步{
最终驱动程序=HTMLDRIVE();
wait driver.setDocumentFromUri(Uri.parse(proxyUrl+hallTicketUrl));
final items=driver.document.querySelectorAll('.middleContent2列a');
元素URL=Element.tag('URL');
items.forEach((item)=>url.append(Element.tag('url'))
..setAttribute('href',item.getAttribute('href'))
..text=item.text
)
);
打印(“${items.length}找到项”);
返回Future.value(url.outerHtml);
}
字符串处理程序(字符串应用程序){
交换机(应用程序){
案例“list”:返回getList()作为字符串;
}
返回“”;
}
main(){
打印(处理程序(“列表”);
}
我认为您误解了async
关键字对方法的作用。当一个方法被标记为async
时,它总是自动返回某事物的未来。这就是您需要指定例如Future
作为返回类型的原因
但由于创建是“自动”完成的,因此您实际上不需要执行以下操作:
return Future.value(urls.outerHtml);
但我们可以做到:
return urls.outerHtml;
在此之后,您已经发现了使用异步编程的问题,其中调用堆栈中的所有内容都需要标记为async
,因为您的代码中有一个wait
我已经修复了您的代码,因此现在希望它能正确地与所有未来的东西一起工作:
import 'package:universal_html/driver.dart';
import 'package:universal_html/prefer_universal/html.dart';
String proxyUrl = 'http://localhost/php-proxy/index.php?q=';
String hallTicketUrl = 'http://www.ignou.ac.in/ignou/studentzone/results/6';
Future<String> getList() async {
final driver = HtmlDriver();
await driver.setDocumentFromUri(Uri.parse(proxyUrl + hallTicketUrl));
final items = driver.document.querySelectorAll('.middleconten2column a');
Element urls = Element.tag('urls');
items.forEach((item) => urls.append(Element.tag('url')
..setAttribute('href', item.getAttribute('href'))
..text = item.text));
print('${items.length} items found');
return urls.outerHtml;
}
Future<String> Handler(String app) async {
switch (app) {
case 'list':
return await getList();
}
return "";
}
main() async {
print(await Handler('list'));
}
import'包:universal_html/driver.dart';
导入“package:universal_html/preference_universal/html.dart”;
字符串proxyUrl=http://localhost/php-proxy/index.php?q=';
字符串hallTicketUrl=http://www.ignou.ac.in/ignou/studentzone/results/6';
Future getList()异步{
最终驱动程序=HTMLDRIVE();
wait driver.setDocumentFromUri(Uri.parse(proxyUrl+hallTicketUrl));
final items=driver.document.querySelectorAll('.middleContent2列a');
元素URL=Element.tag('URL');
items.forEach((item)=>url.append(Element.tag('url'))
..setAttribute('href',item.getAttribute('href'))
..文本=项目.text));
打印(“${items.length}找到项”);
返回URL.outerHtml;
}
未来处理程序(字符串应用程序)异步{
交换机(应用程序){
个案"名单":
return wait getList();
}
返回“”;
}
main()异步{
打印(等待处理程序(“列表”);
}
谢谢,我学到了新东西。但我仍然不明白如何通过创建类/库来在任何地方使用它,即在命令行、javascript和服务器程序中。e、 g.有人在服务器上调用api,处理程序处理请求,它如何独立于未来的对象返回xml/json。我尝试使用shelf服务器,但无法将相同的处理程序(“列表”)输出分配给response.shelf.response(shelf.request request request){shelf.response.ok(“${request.url}”\n'+ht.handler('list');}请使用有关新问题的详细信息更新您的问题,或创建新问题。如果没有代码的上下文,很难帮助您。请检查此项