Tôi đang làm việc trên một dự án yêu cầu mẫu. Mẫu chính có thuộc tính import xác định nguồn dữ liệu. Dữ liệu sau đó được đọc và chèn vào chuỗi bằng String.replaceAllMapped. Đoạn mã sau hoạt động tốt với File api vì nó có phương thức readAsStringSync để đọc tệp một cách đồng bộ. Bây giờ tôi muốn đọc từ bất kỳ luồng tùy ý nào trả về một Tương lai.String.replaceAllMapped với kết quả không đồng bộ
Làm cách nào để tôi thực hiện công việc không đồng bộ/đang chờ xử lý trong trường hợp này? Tôi cũng đã tìm kiếm một thay thế tương thích async cho replaceAllMapped nhưng tôi đã không tìm thấy một giải pháp mà không yêu cầu nhiều pass với regex.
Dưới đây là một ví dụ rất đơn giản của mã của tôi:
String loadImports(String content){
RegExp exp = new RegExp("import=[\"\']([^\"\']*)[\"\']>\\s*<\/");
return content.replaceAllMapped(exp, (match) {
String filePath = match.group(1);
File file = new File(filePath);
String fileContent = file.readAsStringSync();
return ">$fileContent</";
});
}
Ví dụ sử dụng:
print(loadImports("<div import='myfragment.txt'></div>"))
Tôi không chắc tôi hiểu những gì bạn muốn làm, đó là, phần nào làm bạn muốn thay thế bằng 'Tương lai '? Nội dung tệp bạn đã đọc bên trong cuộc gọi đến 'replaceAllMapped'? –
Tonio
Không có phiên bản tích hợp của chức năng như vậy, bạn phải viết một phiên bản mà chức năng gọi lại là không đồng bộ, giống như Tonio bên dưới. – lrn