2013-02-11 12 views
5

मैं भविष्य के परिणाम तुरंत कैसे प्राप्त कर सकता हूं? उदाहरण के लिए:क्या डार्ट के भविष्य को समकालिक रूप से चलाने का कोई तरीका है?

void main() { 
    Process.run('some_shell_command', []).then((ProcessResult result) { 
    print(result.stdout); // I have the output here... 
    }); 
    // ... but want it here. 
} 
+0

मुझे ऐसा करने का एक आसान तरीका नहीं दिख रहा है। कॉलबैक का उपयोग करने में क्या समस्या है? क्या आप सिर्फ कॉलबैक घोंसले को कम करने की कोशिश कर रहे हैं? –

+0

बस जानना चाहते हैं कि यह संभव है या नहीं। – Leksat

उत्तर

2

क्षमा करें, यह संभव नहीं है।

कुछ मामलों में जहां एक फ़ंक्शन new Future.immediate(value) रहे हैं और क़यास आप परिणाम प्राप्त हो सकते हैं, लेकिन:

  1. यह उन मामलों में से एक नहीं है। प्रोसेस पूरी तरह से वीएम द्वारा असीमित रूप से चलाए जाते हैं।
  2. सीधे भविष्य के मूल्य तक पहुंचने की क्षमता libv2 अद्यतन में हटा दी गई है।

तरीका यह संभाल करने के लिए समारोह Process.run() एक भविष्य लौट युक्त है, और कॉलबैक, जो आप जानते हैं करने लगते हैं में अपने सभी तर्क करने के लिए है, इसलिए मैं यह सोचते हैं रहा है कि यहाँ कोड सिर्फ एक उदाहरण है और आप वास्तव में main() में ऐसा नहीं कर रहे हैं। दुर्भाग्यवश, दुर्भाग्यवश, आप मूल रूप से भाग्य से बाहर हैं - यदि आप भविष्य के मूल्य को जानने या ऑपरेशन पूरा करने पर निर्भर करते हैं तो आपको अपना कार्य एसिंक बनाना होगा।

डार्ट और जावास्क्रिप्ट जैसे एकल-थ्रेडेड वातावरण में असिंक वायरल है और हमेशा आपके कॉल स्टैक को प्रचारित करता है। प्रत्येक फ़ंक्शन जो इस फ़ंक्शन को कॉल करता है, और प्रत्येक फ़ंक्शन जो उन्हें कॉल करता है, आदि, एसिंक होना चाहिए।

2

सं

acync एपीआई के पूरे मुद्दे कि जब async आपरेशन खत्म, अपने कोड एक कॉलबैक के रूप में परिणाम प्राप्त करता है।

एक और तरीका है अपने कोड लिखने के लिए, आप घोंसले कम करने के लिए देख रहे हैं, प्रयोगात्मक राज्य में then()

void main() { 
    Process.run('some_shell_command', []).then(doSomethingWithResult); 
} 

void doSomethingWithResult(result) { 
    print(result.stdout); // I have the output here... 
} 
5

the support of await करने के लिए एक समारोह में गुजर रहा है से हो सकता है और की तरह इस्तेमाल किया जा सकता है:

void main() async { 
    ProcessResult result = await Process.run('some_shell_command', []); 
    print(result.stdout); // I have the output here... 
} 
+0

यह भी देखें http://stackoverflow.com/questions/27212220 –

संबंधित मुद्दे

 संबंधित मुद्दे