Вы также можете изменить свой метод uploadFile
на await
для загрузки.
Вы используете await
, чтобы сделать асинхронный вызов синхронным. Однако, если вы смешаете это с .then()
методами, вы, вероятно, сделаете его части непреднамеренно асинхронными.
Future uploadFile() async {
final String rand1 = "${new Random().nextInt(10000)}";
final String rand2 = "${new Random().nextInt(10000)}";
final String rand3 = "${new Random().nextInt(10000)}";
// you don't need {} if it's a simple statement, use $stringvar and ${value.toString}
final StorageReference ref = FirebaseStorage.instance.ref().child('$rand1_$rand2_$rand3.jpg');
StorageUploadTask task = ref.putFile(imageFile);
var downloadUrl = await (await task.onComplete).ref.getDownloadURL();
debugPrint("downloadUrl=$downloadUrl");
return downloadUrl.toString();
}
Используя 3 случайных числа, вы, вероятно, столкнетесь со временем. Рассмотрим использование пакета UUID , вероятность столкновения значительно меньше. :)
Future uploadFile() async {
final String uuid = uuid.v4(); // v4 is random, v1 is time-based
final StorageReference ref = FirebaseStorage.instance.ref().child('$uuid.jpg');
StorageUploadTask task = ref.putFile(imageFile);
var downloadUrl = await (await task.onComplete).ref.getDownloadURL();
return downloadUrl.toString();
}
Моим фаворитом является Jython, и я использую его путем встраивания интерпретатора Jython в мое JAVA-приложение. Это используется в коммерческих проектах, и это позволяет легко настраивать приложение согласно потребностям клиентов, не имея необходимость компилировать что-либо. Просто отправьте им сценарий, и вот именно. Некоторые клиенты могли бы даже настроить свое приложение сами.
Я успешно использовал Groovy в коммерческом проекте. Я предпочитаю языки сценариев из-за утиного ввода и закрытий:
def results = []
def min = 5
db.select(sql) { row ->
if (row.value > min)
results << row;
}
Перевод: Выполните SQL-запрос против базы данных и добавьте все строки, где столбец "значение" больше, чем "минута" для "заканчиваний". Отметьте, как легко можно передать данные внутреннему "циклу" или вытащить результаты из него. И да, я знаю, что мог достигнуть того же с SQL:
def results = []
def min = 5
db.select(sql, min) { row ->
results << row;
}
(просто предположите, что Строка в "sql" имеет a"?" в правильном месте).
По моему скромному мнению, с помощью DB с языком, который не предлагает богатые операции списка (вид, отфильтруйте, преобразуйте), и закрытия просто служит примером, как Вы не должны делать этого.
Я хотел бы использовать Jython больше, но работа над Jython 2.5 запустилась только недавно, и Python 2.2 просто слишком стар в моих целях.
Я мог бы предпочесть Scala, но я не могу сказать, все еще учась. В данный момент с помощью Groovy для записи маленьких утилит. Не попробовали даже Groovy на Grails. Услышанный большая польза о Платформе Лифта для Scala также.
У Носорога JavaScript есть востребованное преимущество - он включен с JDK. Однако более поздние версии Носорога, чем тот с Java 6 имеют хорошие функции как генераторы, выстраивают понимания и destructuring присвоение.
Я одобряю использование его каждый раз, когда церемония обработки исключений Java загромождает код ни для какой реальной выгоды. Я также использую его, когда я хочу записать простой сценарий командной строки, который использует в своих интересах библиотеки Java.
Java. Серьезно. Это - мощное, простое в использовании (если немного подробный) язык, который все знают. Интеграция с Java является большой.
Компания, на которую я работаю, встраивает Groovy в веб-сайт Java/Spring, который развертывается в ряде сайтов. Сценарии хранятся внешне скомпилированного ВОЕННОГО файла и позволяют нам управлять частью логики сайта, не имея необходимость развертывать новую ВОЙНУ на каждый сайт. До сих пор этот подход работал очень изящно на нас.
Особенно хорошая функция Groovy - то, что он может тесно напомнить код Java, который делает очень легким портировать существующие классы Java на него.
Как насчет SISC (второй интерпретатор кода схемы)?
ССЫЛКА: http://sisc-scheme.org/
Для меня Clojure выигрывает. Будучи Lisp, он краток и динамически типизирован, он обладает огромной выразительной силой, поэтому я могу написать много функций в нескольких строках. И его интеграция с Java непревзойденная - я ' Я лишь частично шучу, когда говорю, что Clojure более совместим с Java, чем сама Java. В результате можно полностью использовать весь спектр Java-библиотек, как от JDK, так и от сторонних разработчиков.
Наконец, при небольшой осторожности код Clojure может быть таким же быстрым, как код Java, поэтому я даже не теряю производительность .