我在Dart的許多地方使用stdout.write(),以免去換行。它工作正常,但最近從同步更改爲異步。我已經在Win7-32和Win8-64上升級到Dart 28355。Dart中的stdout.write()顯然已從同步更改爲異步,但我該如何使用它?
下面介紹的變化:
「什麼樣的變化 寫入輸出和錯誤曾經被封鎖,在所有平臺上作爲清除的一部分,這是目前異步/非阻塞任何其他?行旅中鏢:IO 如何更新我的代碼 大多數代碼應該只是像以前那樣,除極少數情況下調用「退出」的時候:」
的,我想達到什麼樣的一個小例子如下:
import 'dart:io';
main() {
String sCorrectYn;
while (sCorrectYn != "y") {
String sName = fInputString("Enter Name : ");
sCorrectYn = fInputString("Details Correct? (y/n) : ");
}
}
String fInputString(String sPrompt) {
stdout.write("\n$sPrompt");
return stdin.readLineSync().toLowerCase();
}
012上運行的win8以上時
端子輸出如下:
c:\Users\boh\dart-dev1\testpg001>dart testinput001.dart
Enter Name : abcd
n
xxxx
n
zzzz
y
Details Correct? (y/n) :
Enter Name :
Details Correct? (y/n) :
Enter Name :
Details Correct? (y/n) :
c:\Users\boh\dart-dev1\testpg001>
什麼與上述發生的是,所有的終端輸出的出現後我最後輸入「Y」,這將終止該程序並刷新輸出緩衝區(它出現)。第一個終端輸出「輸入名稱:」是它應該發生的唯一輸出。
看來stdout沒有「flush」方法。
我沒有用未來的stdout做實驗,但是我無法讓它正常工作。
我怎樣才能以需要的方式工作?
以下也如使用stdout.write()所需的不工作:
import 'dart:io';
main() {
String sInput;
stdout.write("\nEntry 1 : ");
sInput = stdin.readLineSync();
print("Date Entered (1) was : $sInput");
stdout.write("\nEntry 2 : ");
sInput = stdin.readLineSync();
print("Date Entered (2) was : $sInput");
stdout.write("\nEntry 3 : ");
sInput = stdin.readLineSync();
print("Date Entered (3) was : $sInput");
stdout.write("\nEntry 4 : ");
sInput = stdin.readLineSync();
print("Date Entered (4) was : $sInput");
stdout.write("\nEntry 5 : ");
sInput = stdin.readLineSync();
print("Date Entered (5) was : $sInput");
}
終端顯示用於上述顯示第一行「條目1:」是當使用stdout.write(當僅需要顯示線):
c:\Users\boh\dart-dev1\testpg001>dart testinput003.dart
Entry 1 : aaa
Date Entered (1) was : aaa
bbb
Date Entered (2) was : bbb
ccc
Date Entered (3) was : ccc
ddd
Date Entered (4) was : ddd
eee
Date Entered (5) was : eee
Entry 2 :
Entry 3 :
Entry 4 :
Entry 5 :
c:\Users\boh\dart-dev1\testpg001>
您的while循環阻止任何異步發生。在這種情況下,你真的需要切換到未來。請展示你用期貨嘗試過的東西。 – GameAlchemist
我試過沒有循環,結果是一樣的。除了第一行之外,沒有stdout.write()的輸出,直到程序終止。我對Future沒有運氣,我不知道是否有解決方案,對我來說似乎沒有。如果有人能說明如何使它工作,我將不勝感激,因爲我需要它與輸入(readLineSync())一起工作。我需要處理對提示的連續響應輸入。 –