फ्यूचर एंड फिर के साथ मेरा कोड पूरी तरह से काम करता है। नीचे देखें:

/*main is the entry point of code*/
void main() {

var futureObject = getPostFromServer();
printPost(futureObject);

}
getPostFromServer(){

var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};

var futureObject = Future.delayed(duration, computation);
return futureObject;

}
printPost(var futureObject){
futureObject.then(
(actualString){
print(actualString);
}

);
}
/*
OUTPUT
You will get it in future
*/

हालांकि, जब मैं एसिंक के साथ कोशिश कर रहा हूं और प्रतीक्षा करें तो मैं वही आउटपुट प्राप्त करने में सक्षम नहीं हूं।

    Instance of '_Future<dynamic>'

मैं भविष्य का मूल्य क्यों नहीं प्राप्त कर पा रहा हूँ?

/*main is the entry point of code*/
void main() {

var futureObject = getPostFromServer();
printPost(futureObject);

}
getPostFromServer() async {

var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};

var futureObject = await Future.delayed(duration, computation);
return futureObject;

}
printPost(var futureObject){
print(futureObject);
}
/*
OUTPUT
start
Instance of '_Future<dynamic>'
end    */

धन्यवाद

0
maddy 5 अगस्त 2019, 20:00

1 उत्तर

सबसे बढ़िया उत्तर

जब आप किसी विधि को async के साथ चिह्नित करते हैं, तो डार्ट आपको एक भविष्य परोक्ष रूप से वापस कर देगा। इसलिए यदि आप इस पद्धति के परिणाम का उपयोग करना चाहते हैं तो आपको फिर से परिणाम की प्रतीक्षा करनी होगी।

नीचे मैंने भविष्य की प्रतीक्षा की है और फिर इसे एक एसिंक विधि में मुद्रित किया है। तो मेरे अंगूठे का नियम हमेशा इंतजार कर रहा है और अनुक्रमिक कार्यक्रम में आप की तरह अपनी कार्यक्षमता करें। यदि आप किसी एसिंक फ़ंक्शन से कोई मान वापस करते हैं तो आप डार्ट को बता रहे हैं कि विधि को निष्पादित करने में समय लगेगा, इसलिए इसे भविष्य में लपेटें और परिणाम वापस कर दें।

आपके उदाहरण में getPostFromServer() क्लाइंट साइड कोड में एक मिनी सर्वर के रूप में कार्य करता है और प्रिंटपोस्ट() उप क्लाइंट के रूप में कार्य करता है जिसे प्रतीक्षा करनी चाहिए और फिर परिणाम पढ़ना चाहिए। async और await सर्वर और क्लाइंट दोनों पक्षों में समान रूप से महत्वपूर्ण हैं। फर्क सिर्फ इतना होगा कि हम इसका इस्तेमाल कैसे करते हैं। :)

void main() {

var futureObject = getPostFromServer();
printPost(futureObject);

}
getPostFromServer() async {

var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};

var futureObject = await Future.delayed(duration, computation);
return futureObject;

}
printPost(var futureObject) async {
 print(await futureObject);
}

डार्टपैड में समान कोड:

https://dartpad.dartlang.org/59610dc768e232ac5a8e724f7fe0eee6

1
Abhilash Chandran 5 अगस्त 2019, 20:27