小编Vin*_*ink的帖子

如何传递消息以隔离和处理错误

我正在尝试使用dart隔离库来提高我的应用程序性能.

看下面的代码:

import 'dart:isolate';
import 'package:dbcrypt/dbcrypt.dart';

main() {

  var pwConPort = new ReceivePort();
  pwConPort.listen((data) {
      print(data);
      pwConPort.close();
  }, onError: (err) {
      print(err);
  });

  Isolate.spawn(generatePasswordConcurrency, pwConPort.sendPort);

}

void generatePasswordConcurrency(SendPort sendPort) {
    sendPort.send(_generateHashPassword('Passsowr1222!'));

}

String _generateHashPassword(String password) {
    var regex = new RegExp(r'^.*(?=.{7,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$');
    if (!regex.hasMatch(password)) {
        throw new StateError('Errors');
    }
    return new DBCrypt().hashpw(password, new DBCrypt().gensalt());
}
Run Code Online (Sandbox Code Playgroud)

一切正常但我只能传递一个静态密码,或者更好地说,我不知道,如何动态传递一些东西.在这里你可以看到,密码是硬编码的,但我想传递一个变量.

void generatePasswordConcurrency(SendPort sendPort) {
    sendPort.send(_generateHashPassword('Passsowr1222!'));

}
Run Code Online (Sandbox Code Playgroud)

如果方法_generateHashPassword将抛出错误,我该如何处理此错误?我尝试从ReceivePort捕获listen方法的错误

  pwConPort.listen((data) {
      print(data);
      pwConPort.close();
  }, onError: (err) {
      print(err);
  });
Run Code Online (Sandbox Code Playgroud)

但仍然有未处理的异常消息.

Observatory listening on http://127.0.0.1:51433
in ShutdownIsolate: Unhandled …
Run Code Online (Sandbox Code Playgroud)

dart dart-isolates

4
推荐指数
1
解决办法
1491
查看次数

标签 统计

dart ×1

dart-isolates ×1