String 从未来对象返回字符串

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=

我试图通过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=';
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');}请使用有关新问题的详细信息更新您的问题,或创建新问题。如果没有代码的上下文,很难帮助您。请检查此项