2012-02-07 19 views
8

डार्ट में, Isolates की एक अवधारणा है। मेरे पास एक एप्लिकेशन है (जिसे मैं डार्ट में प्रयोग कर रहा हूं) जिसमें बहुत सी असीमित आईओ है जहां प्रत्येक कॉल (वे डेटाबेस कॉल हैं) पिछले एक पर निर्भर हैं। तो मैं एक घोंसला कॉलबैक नरक में समाप्त हो गया है।डार्ट में साफ-अलग (पृथक) में कई एसिंक्रोनस I/O क्रियाएं कैसे करें?

मैं सोच रहा था कि क्या अलगाव उस नेस्टेड कॉलबैक सूप को हल कर सकता है, लेकिन यह थोड़ा वर्बोज़ दिखता है और मुझे यकीन नहीं है कि यह ठीक से फिट बैठता है या नहीं।

अगली ईसीएमएस्क्रिप्ट सद्भाव में जेनरेटर भी प्रस्तावित हैं जो इन चीजों को हल कर सकते हैं, लेकिन आप वर्तमान में डार्ट में असीमित आईओओ को एक साफ तरीके से कैसे करेंगे?

उत्तर

6

आप चेन काम के साथ Future's और Completers का उपयोग कर सकते हैं। निम्नलिखित भविष्य एक process से एक 'ls' कमांड का परिणाम देता है:

Future<String> fetch(String dir) { 
    final completer = new Completer(); 
    Process process = new Process.start('ls', [dir]); 
    process.exitHandler = (int exitCode) { 
    StringInputStream stringStream = new StringInputStream(process.stdout); 
    stringStream.dataHandler =() { 
     String content = stringStream.read(); 
     completer.complete(content); 
     process.close(); 
    }; 
    }; 
    process.errorHandler = (var error) { 
    completer.completeException(error); 
    return true; 
    }; 
    return completer.future; 
}; 

है जिसे आप इस तरह एक साथ श्रृंखला कर सकते हैं:।

लाने ('/') तो ((वैल) => fetch ("/ usr")। फिर ((val) => fetch ("/ tmp")));

सबसे सुंदर समाधान नहीं है लेकिन यह अब मुझे मिलता है।