美文网首页
flutter 同时执行多个异步请求回调

flutter 同时执行多个异步请求回调

作者: yun_xi | 来源:发表于2021-08-16 16:40 被阅读0次

flutter中提供了Future.wait()函数,可以在执行多个异步请求之后有一个统一的回调结果,但是劣势在于,每一个异步函数的函数体中都需要执行return去返回结果,如果在异步请求中,有多层success或者fail这种函数的嵌套,那么可能会在某个地方忽略掉retrun,导致没有办法拿到正确的结果。所以这里封装了一个类似于js中Promise中的类去执行多个异步请求。

  • Promise Class代码如下
class Promise {

  Future future;

  static Future all(List<Promise> promises) async{
    var items = promises.map((promise) {
      return  promise.then((value) {
          return Future.delayed(Duration(seconds: 0), () {
            return value;
          });
        });
    }).toList();
   return await Future.wait(items);
  }

  Promise(dynamic execute(dynamic resolve(val), dynamic reject(val))) {
    if (!(execute is Function)) {
      throw new AssertionError('execute params type is error');
    }
    final completer = Completer();
    try {
      execute(completer.complete, completer.completeError);
    } catch (e) {
      completer.completeError(e);
    }
    this.future = completer.future;
  }

  Future then(Future Function(dynamic) onValue, {Function onError}) {
    return this.future?.then(onValue, onError: onError);
  }
}

调用方式如下:

{
  var p1 = method1();
  var p2 = method2();
  Promise.all([p1, p2]).then((value) {
    print(value);
  }).catchError((e) {
    print('出错了$e');
  });
}

Promise method1() {
  Promise promise = Promise((resolve, reject) {
    Future.delayed(Duration(seconds: 3), () {
      resolve("hello");
    });
  });
  return promise;
}

Promise method2() {
  Promise promise = Promise((resolve, reject) {
    Future.delayed(Duration(seconds: 2), () {
      resolve("world");
    });
  });
  return promise;
}

相关文章

  • flutter 同时执行多个异步请求回调

    flutter中提供了Future.wait()函数,可以在执行多个异步请求之后有一个统一的回调结果,但是劣势在于...

  • iOS 网络请求回调问题

    1、多个网络请求完成后通知继续执行 2、多个异步请求,顺序回调结果

  • promise任务队列串行化执行

    js经常会遇到异步的执行,简单的异步执行可以使用回调,多个异步回调执行可以使用await/async解决。遇到多个...

  • java http请求中调用socket/websocket业务

    关键检索:request等待异步回调并继续执行,http请求挂起等待socket异步回调。随着智能行业蓬勃发展,难...

  • 2018-08-24

    请求img 时候马上执行js 在异步的回调里面等

  • AJax基础

    什么是Ajax Ajax是用JavaScript执行异步网络请求,请求是异步执行的,也就是说,要通过回调函数获得响...

  • Flutter回调地狱及多个请求依赖处理

    仅记录flutter重要笔记 1. 多个请求依赖, 仅用于多个异步操作都完成后, 执行其它操作, 关键语法: Fu...

  • ios多个异步请求回调后再执行操作

    以前遇到的需求(见标题),自己实现了一下,贴上代码。包含了完整请求过程,拿来党请拿走。 #pragma mark ...

  • 关于多个网络请求同步的一些总结

    等待多个并发请求同步回调 例如同时发起网络请求A,网络请求B,网络请求C,需等待A,B,C都返回了才进行回调。曾经...

  • Promise

    Promise 解决了回调地狱问题,不会导致难以维护;合并多个异步请求,节约时间。 Promise Promise...

网友评论

      本文标题:flutter 同时执行多个异步请求回调

      本文链接:https://www.haomeiwen.com/subject/vqzmbltx.html