flutter之---Future的正確用法

在flutter中經常會用到異步任務,dart中異步任務異步處理是用Future來處理,那么如何實現用Future來處理一個異步操作呢,網上的Future教程、原理都是說說原理,但是沒有什么干貨,沒有教你如何去用。今天看了下源碼,終于知道如何去使用Future了。其實和javaScript的promise很像,但是promise的參數函數的參數提供了resolve,reject方法去操控狀態,
那么Future難道就沒有嗎?原來dart:async提供了Completer類,通過實例這個類生成Future,同時在用這個實例去控制生成的future的成功或者失敗的狀態。代碼如下:

Future openImagePicker () {
    Complete completer = new Completer();
   
    // ImagePicker 是一個圖片選擇插件
    ImagePicker.singlePicker(
       context, 
       singleCallback: (data) {
         completer.complete(data);
       },
       failCallback:(err) {
         completer.catchError(err); 
       }
    );
     
    return completer.future;
}

// 使用

openImagePicker().then((data) {}).catchError((err){});

返回completer生成的future,通過completer.complete方法去控制completer.future的成功狀態,通過completer.catchError去控制completer.future的失敗狀態。
completer.complete和completer.catchError方法的參數就是future的返回值。

completer.complete就相當于promise的resolve,completer.catchError相當于promise中的reject()

通過Completer可以得心應手的控制Future的狀態。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 你不知道JS:異步 第三章:Promises 在第二章,我們指出了采用回調來表達異步和管理并發時的兩種主要不足:缺...
    purple_force閱讀 2,108評論 0 4
  • 在flutter中經常會用到異步任務,dart中異步任務異步處理是用Future來處理,那么如何實現用Future...
    hypercode閱讀 622評論 0 0
  • 你不知道JS:異步 第三章:Promises 接上篇3-1 錯誤處理(Error Handling) 在異步編程中...
    purple_force閱讀 1,416評論 0 2
  • async 函數 含義 ES2017 標準引入了 async 函數,使得異步操作變得更加方便。 async函數對 ...
    Xyaleo閱讀 1,107評論 0 4
  • 弄懂js異步 講異步之前,我們必須掌握一個基礎知識-event-loop。 我們知道JavaScript的一大特點...
    DCbryant閱讀 2,748評論 0 5