标签: dart-async

函数`runZoned`的'dart:async'的目的

runZoned提供的特殊功能dart:async.该文件在此处:https://api.dartlang.org/docs/channels/stable/latest/dart_async.html#runZoned

我不确定这个功能的目的是什么,我们什么时候需要它,以及如何正确使用它?

dart dart-async

6
推荐指数
1
解决办法
486
查看次数

Dart事件队列和微任务

我想了解,飞镖事件循环如何工作.我从网站The Event Loop和Dart中读到了事件循环文章,作者解释了dart中的事件循环是如何工作的.

但我不明白的是,事件是如何排队的.例如

new Future(() => 21)
    .then((v) => v*2)
    .then((v) => print(v));
Run Code Online (Sandbox Code Playgroud)

这里会不会在事件队列中创建三个条目或只创建一个条目?我知道,类Future负责延迟执行,当我从中创建一个对象时

new Future(() => 21)
Run Code Online (Sandbox Code Playgroud)

它只是事件循环中的一个条目.

在我上面提到的这篇文章中,我读到了微任务.这个微任务将在事件队列之前执行,但我没有看到任何意义,为什么dart团队实现这个微任务呢?也许我需要一些例子!

event-loop dart dart-async

6
推荐指数
2
解决办法
1385
查看次数

dart2js后异步函数中两个keyCodes的比较不正确

我不明白dart2js代码的这种行为.
我只在async函数中使用它,并且只在编译成JS之后.

e.keyCode is equal 13
KeyCode.ENTER is equal 13
Run Code Online (Sandbox Code Playgroud)


(e.keyCode == KeyCode.ENTER) is false
Run Code Online (Sandbox Code Playgroud)

这是调试我的问题的简单代码.
这是怎么回事?

import 'dart:html';

main() async
{
  await for(KeyboardEvent e in window.onKeyDown)
  {
    print('e.keyCode : ${e.keyCode}');
    print('e.keyCode.hashCode : ${e.keyCode.hashCode}');
    print('KeyCode.ENTER : ${KeyCode.ENTER}');
    print('KeyCode.ENTER.hashCode : ${KeyCode.ENTER.hashCode}');
    print('e.keyCode.runtimeType : ${e.keyCode.runtimeType}');
    print('KeyCode.ENTER.runtimeType : ${KeyCode.ENTER.runtimeType}');
    print('e.keyCode == KeyCode.ENTER ${e.keyCode == KeyCode.ENTER}');
    print('e.keyCode != KeyCode.ENTER ${e.keyCode != KeyCode.ENTER}');
    int a = e.keyCode;
    int b = KeyCode.ENTER;
    print('a = $a');
    print('b = $b');
    print('a.hashCode = ${a.hashCode}');
    print('b.hashCode = ${b.hashCode}');
    print('a …
Run Code Online (Sandbox Code Playgroud)

dart dart2js dart-async

6
推荐指数
1
解决办法
103
查看次数

Dart:多个等待相同的未来

我最近看到了一些像下面这样的代码示例

Future<Null> ensureLogin() {...}

var login = ensureLogin();

Future functionA() async {
   await login;
   print("FunctionA finished");
}

Future functionB() async {
   await login;
   print("FunctionB finished");
}

void main() {
   functionA();
   functionB()
}
Run Code Online (Sandbox Code Playgroud)

当 future 完成时,它会打印如下:

FunctionA finished
FunctionB finished
Run Code Online (Sandbox Code Playgroud)

看起来我们可以对同一个未来对象有多个等待?但这到底是如何运作的呢?它相当于 Future 是什么?也许像下面这样?

login.then(functionA).then(fucntionB)
Run Code Online (Sandbox Code Playgroud)

future dart dart-async

6
推荐指数
1
解决办法
1447
查看次数

返回 void 与返回 Future&lt;void&gt; 有什么区别?

有没有之间的差异async方法,返回void,和一个回报Future<void>?似乎两者在 Dart 中都有效:

void main() async {
    await myVoid();
    await myFutureVoid();
}


void myVoid() async {
    // Do something
}


Future<void> myFutureVoid() async {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

它们相同吗?

如果是这样,为什么void在例如不允许时允许int?编译器说“标记为 'async' 的函数必须具有可分配给 'Future' 的返回类型”

asynchronous future async-await dart dart-async

6
推荐指数
1
解决办法
1623
查看次数

异步代码的 UnitTest 示例

某种方式阅读了Dart 单元测试后,我仍然无法理解如何将它与Futures一起使用。

例如:

void main()
{
    group('database group',(){
    setUp( () {
                // Setup
           });

    tearDown((){
                // TearDown
           });

    test('open connection to local database', (){
        DatabaseBase database = null;

        expect(database = new MongoDatabase("127.0.0.8", "simplechat-db"), isNotNull);

        database.AddMessage(null).then(
            (e) {
                  expectAsync1(e) 
                  {
                     // All ok
                  }
                },
            onError: (err)
                     {
                        expectAsync1(bb)
                        {
                          fail('error !');
                        }
                     }
         );

});

// Add more tests here
Run Code Online (Sandbox Code Playgroud)

}); }

因此,在测试中,我创建了一个基本抽象类的实例,DatabaseBase并为实际的MongoDb类创建了一些参数,并立即检查它是否已创建。然后,我只是运行一些很简单的功能:AddMessage。该函数定义为:

Future AddMessage(String message);
Run Code Online (Sandbox Code Playgroud)

并返回completer.future …

dart dart-unittest dart-async

5
推荐指数
1
解决办法
4428
查看次数

为什么 Dart StreamController.addStream 在加入流时无法按预期工作

给出以下 Dart 代码片段:

Stream stream1 = new Stream.periodic(new Duration(seconds: 1), (n) => n)
                           .take(10)
                           .asBroadcastStream();
stream1.listen((n) => print("stream1 : $n"),
               onError : (err) => print("stream1 : $err"),
               onDone : () => print("stream1 : done"),
               cancelOnError : false);

Stream stream2 = stream1.where((n) => n % 2 == 0).take(2);
stream2.listen((n) => print("stream2 : $n"),
               onError : (err) => print("stream2 : $err"),
               onDone : () => print("stream2 : done"),
               cancelOnError : false);

Stream stream3 = stream1.where((n) => n % 2 != 0).take(2);
stream3.listen((n) …
Run Code Online (Sandbox Code Playgroud)

dart dart-async

5
推荐指数
1
解决办法
2918
查看次数

在 Dart 中读取数据文件进行单元测试

我正在使用此代码片段在单元测试中读取数据文件:

var file = new File('/Users/chambery/projects/Foo/src/resources/skills.yaml');
Future<String> finishedReading = file.readAsString();
finishedReading.then((text) {
  print(text);
  print(loadYaml(text));
});
Run Code Online (Sandbox Code Playgroud)

在 Dart 编辑器中运行我没有收到错误(但没有打印输出),

...
PASS: calc_ranks
PASS: load_skills

All 7 tests passed.
unittest-suite-success
Run Code Online (Sandbox Code Playgroud)

(编辑:删除了命令行错误;dart vm 已过时)

我不需要异步文件读取。

dart dart-unittest dart-io dart-async

5
推荐指数
1
解决办法
735
查看次数

Dart - 如何模拟返回未来的方法

我有一个类定义了一个返回 Future 的方法。Future 包含一个类列表,这些类也返回一个未来。

    class User{
      Future<List<Album>> albums(){

      };
    }
    class Album{
      Future<List<Photos>> photos(){
      }
    };
Run Code Online (Sandbox Code Playgroud)

在测试另一个类时模拟这些类中方法的最佳方法是什么?

我试图测试的课程看起来有点像

class Presenter {
   Presenter( User user){
       user.albums().then( _processAlbums);
   }
   _processAlbums(List<Album> albums) {
      albums.forEach( (album)=>album.photos.then( _processPhotos));
  }
  _processPhotos(List<Photo> photos) {
     ....stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试编写这样的单元测试

class MockUser extends Mock implements User{}
class MockAlbum extends Mock implements Album{}
class MockPhoto extends Mock implements Photo{}

class MockFutureList<T> extends Mock implements Future<T>{

  MockFutureList( List<T> items){
    when( callsTo( "then")).thenReturn( items);
  }
}

void main(){

  test("constuctor should request the …
Run Code Online (Sandbox Code Playgroud)

dart dart-unittest dart-async

5
推荐指数
2
解决办法
7250
查看次数

如何在 Dart 中检查 Stream 的结束?

各位 Dart 程序员。

我正在使用 Stream 读取文件,如下所示。

Stream<List<int>> stream = new File(filepath).openRead();
stream
    .transform(UTF8.decoder)
    .transform(const LineSpilitter())
    .listen((line){
        // TODO: check if this is the last line of the file
        var isLastLine;
    });
Run Code Online (Sandbox Code Playgroud)

我想检查listen()中的行是否是文件的最后一行。

dart dart-async

5
推荐指数
1
解决办法
3359
查看次数