Skip to content

Suppressing asynchronous exceptions to avoid app crashes#89

Open
lawsbear wants to merge 1 commit into
xvrh:masterfrom
lawsbear:caybear-patch-1
Open

Suppressing asynchronous exceptions to avoid app crashes#89
lawsbear wants to merge 1 commit into
xvrh:masterfrom
lawsbear:caybear-patch-1

Conversation

@lawsbear

@lawsbear lawsbear commented Nov 7, 2019

Copy link
Copy Markdown

App crash stackTrace:

Unhandled exception:
No resource with given identifier found
#0      NetworkApi.getResponseBody (package:puppeteer/protocol/network.dart:299:18)
<asynchronous suspension>
#1      Response.content.<anonymous closure> (package:puppeteer/src/page/network_manager.dart:573:12)
<asynchronous suspension>
#2      _RootZone.runUnary (dart:async/zone.dart:1379:54)
#3      _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#4      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#5      Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#6      Future._completeWithValue (dart:async/future_impl.dart:522:5)
#7      Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:552:7)
#8      _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#9      _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#10     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:116:13)
#11     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:173:5)

Suppressing asynchronous exceptions to avoid app crashes
@xvrh

xvrh commented Nov 7, 2019

Copy link
Copy Markdown
Owner

Hello @caybear,
Thanks for the contribution :-)

Can give an example when this crash happens? (ideally a small reproduction script)

@lawsbear

lawsbear commented Nov 7, 2019

Copy link
Copy Markdown
Author

@xvrh This code will crash the app.
Execute this command "chrome.exe --remote-debugging-port=9222" before execute following code please.

import 'dart:convert';
import 'dart:io';

import 'package:puppeteer/puppeteer.dart';

final httpClient = HttpClient();

main(List<String> arguments) async {
  /**
   * Get browser endpoint.
   *
   * clientInfo['webSocketDebuggerUrl'].
   */
  String endpoint;
  try {
    final HttpClientRequest request =
        await httpClient.getUrl(Uri.parse('http://127.0.0.1:9222/json/version'));
    final HttpClientResponse response = await request.close();
    final Map<String, dynamic> clientInfo = jsonDecode(await utf8.decoder.bind(response).join(''));
    endpoint = clientInfo['webSocketDebuggerUrl'];
  } on Exception catch (message) {
    print(message);
    return;
  }

  final browser = await puppeteer.connect(browserWsEndpoint: endpoint);
  final webPage = await browser.newPage();
  webPage.onResponse.listen((response) async {
    if (response.url.contains('xiaohei.jpg')) print((await response.content).length);
  });

  await webPage.goto('https://produce.unimap.ai:12080/dart.html', wait: Until.domContentLoaded);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants