खोज…


पूर्णांक का उपयोग करके भविष्य लौटना

Future<Results> costlyQuery() {
  var completer = new Completer();

  database.query("SELECT * FROM giant_table", (results) {
    // when complete
    completer.complete(results);
  }, (error) {
    completer.completeException(error);
  });

  // this returns essentially immediately,
  // before query is finished
  return completer.future; 
}

Async और Await

import 'dart:async';

Future main() async {
  var value = await _waitForValue();
  print("Here is the value: $value");
  //since _waitForValue() returns immediately if you un it without await you won't get the result
  var errorValue = "not finished yet";
  _waitForValue();
  print("Here is the error value: $value");// not finished yet
}

Future<int> _waitForValue() => new Future((){

  var n = 100000000;

  // Do some long process
  for (var i = 1; i <= n; i++) {
    // Print out progress:
    if ([n / 2, n / 4, n / 10, n / 20].contains(i)) {
      print("Not done yet...");
    }

    // Return value when done.
    if (i == n) {
      print("Done.");
      return i;
    }
  }
});

डार्टपैड पर उदाहरण देखें: https://dartpad.dartlang.org/11d189b51e0f2680793ab3e16e53613c

वायदा करने के लिए कॉलबैक परिवर्तित

डार्ट में फ्यूचर , स्ट्रीम , और बहुत कुछ के साथ एक मजबूत एसिंक्स लाइब्रेरी है। हालांकि, कभी-कभी आप एक अतुल्यकालिक एपीआई में भाग ले सकते हैं जो फ्यूचर्स के बजाय कॉलबैक का उपयोग करता है। कॉलबैक और फ्यूचर्स के बीच की खाई को पाटने के लिए, डार्ट Completer वर्ग प्रदान करता है। कॉलबैक को फ्यूचर में बदलने के लिए आप कंप्लीटर का उपयोग कर सकते हैं।

पूर्णांक फ्यूचर-आधारित API के साथ कॉलबैक-आधारित API को ब्रिज करने के लिए बहुत अच्छा है। उदाहरण के लिए, मान लें कि आपका डेटाबेस ड्राइवर फ्यूचर्स का उपयोग नहीं करता है, लेकिन आपको फ्यूचर वापस करने की आवश्यकता है। इस कोड को आज़माएं:

  // A good use of a Completer.

  Future doStuff() {
    Completer completer = new Completer();
    runDatabaseQuery(sql, (results) {
      completer.complete(results);
    });
    return completer.future;
  }

यदि आप ऐसे API का उपयोग कर रहे हैं जो पहले से ही Future लौटाता है, तो आपको पूर्णक का उपयोग करने की आवश्यकता नहीं है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow