Асинхронный код просто запланирован на конец выполнения и синхронизация код продолжает выполняться без ожидания кода асинхронного. Метод, который вы передаете Future.then(...)
, выполняется, когда законченный асинхронный код завершен. Вы найдете много таких вопросов и примеров, помеченных [: dart-async:] здесь, в StackOverflow.
Если вы хотите код, который будет выполняться, когда код асинхронного завершения вам необходимо приковать его с then
как вы сделали с другим кодом
var jerl = "asd";
HttpRequest.request('Foo',
method: "GET",
/* return */ requestHeaders: {"Authorization": "Secret"})
.then((response) {
var jer1 = x.responseText;
print(jerl);
});
Вы можете использовать функцию async
/await
, чтобы сделать код более похожим код синхронизации
Future someMethod() async { // <== added `Future` and `async`
var jerl = "asd";
var response = await HttpRequest.request('Foo', // <== added `await`
method: "GET",
requestHeaders: {"Authorization": "Secret"}).then((x) =>
print(response.text);
}
async
является заразной. Невозможно вернуться от выполнения async для выполнения синхронизации. Если ваш код вызывает какой-либо метод или функцию async, и вам нужен код дальше, чтобы дождаться результата async, вам необходимо связать весь следующий код (также в методах вызова) с .then
(или использовать async
/await
). Для этого вам также понадобится return
будущее для вызывающего абонента, чтобы он мог позвонить .then()
.
С async
/await
вам не нужно явно возвращать будущее.
async
/await
не делает асинхронный код синхронизации (как упоминался выше), это только делает его выглядеть больше как код синхронизации. Основополагающее поведение идентично тому, как с then
.
это не похоже на код angularjs .... – Claies
Должно быть, это подсознательно добавлено – BluishMicrobe