1
import 'dart:io';
import 'dart:async';

void main() {
  HttpClient client = new HttpClient();
  client.getUrl(Uri.parse('http://api.dartlang.org/docs/releases/latest/dart_io/HttpClientResponse.html'))
    .then((HttpClientRequest request) => request.close())
    .then((HttpClientResponse response) {
      response.listen(print, onError: (e) {
        print('error: $e');
      }); 
    });
}

上記のコードは機能せず、同様の方法を使用してリッスンしpipefold例外もスローします =>Breaking on exception: The null object does not have a method 'cancel'.

アップデート

ローカル マシンに接続する場合のコード例を次に示します。

import 'dart:io';
import 'dart:async';

void main() {
  HttpServer.bind('127.0.0.1', 8080)
    .then((HttpServer server) {
      server.listen((HttpRequest request) {
        File f = new File('upload.html');
        f.openRead().pipe(request.response);
      });

      HttpClient client = new HttpClient();
      client.getUrl(Uri.parse('http://127.0.0.1:8080'))
        .then((HttpClientRequest request) => request.close())
          .then((HttpClientResponse response) {
            response.listen(print, onError: (e) {
              print('error: $e');
            });
          });
    });
}

最初にバイトを出力してから、例外をスローしますBreaking on exception: The null object does not have a method 'cancel'.

Dart Editor バージョン 0.7.2_r27268。Dart SDK バージョン 0.7.2.1_r27268。Windows 64 ビット マシン上。

4

2 に答える 2

0

提示されたコードは問題ないように見えますが、0.7.2.1 でもブリーディング エッジでもエラーを再現できませんでした。ネットワークに、直接 HTTP 接続が失敗する可能性のあるプロキシ設定があるかどうか知っていますか? 代わりに、ローカル マシン上のサーバーに接続してみてください。それでも失敗する場合は、詳細情報とともにhttps://code.google.com/p/dart/issues/listでバグを開くことをお勧めします。

于 2013-09-16T06:53:09.850 に答える