如何解决一个未来的Flutter( dart )?

eiee3dmh  于 2023-06-07  发布在  Flutter
关注(0)|答案(3)|浏览(229)

我想写一个函数,它会返回,直到上传完成。如果可能的话,如果我也能添加一个超时就好了。

waitForUpload() async {
     uploader.result.listen((result) {
        // return waitForUpload
     }
 }

我只是不知道如何在dart中写这个。为了更清楚地说明:在JS中,代码看起来像这样:

async waitForUpload() {
  return new Promise((resolve) => {
    uploader.result.listen((result) {
        resolve();
    });
  });
}
r6l8ljro

r6l8ljro1#

使用完成程序会更简单。

Future time(int time) async {

  Completer c = new Completer();
  new Timer(new Duration(seconds: time), (){
    c.complete('done with time out');
  });

  return c.future;
}
gudnpqoy

gudnpqoy2#

Stream.single实现了我想要的行为。查看implementation,您可以看到future._complete(result);listen方法中被调用,该方法解析未来。

jqjz2hbq

jqjz2hbq3#

你可以创建一些类似的类来模仿js promise。

class Promise {
  Completer _c = Completer();

  bool _holdExecutionFlag = true;

  void holdExecution() async {
    _holdExecutionFlag = true;
  }

  void resumeExecution() {
    _c.complete();
    _c = Completer();
    _holdExecutionFlag = false;
  }

  Future waitForExecution() async {
    if (_holdExecutionFlag) await _c.future;
  }
}

像这样利用它

import 'dart:async';

void main() async {
  Promise promise = Promise();
  promise.holdExecution();

  Future.delayed(Duration(seconds: 2), promise.resumeExecution);
  await promise.waitForExecution();
  print('success');
}

相关问题