Вопрос был:
Как вернуть ответ от асинхронного вызова?
blockquote>, который может быть интерпретирован как:
Как сделать синхронный асинхронный код синхронным?
blockquote>Решение будет состоять в том, чтобы избежать обратных вызовов и использовать комбинацию Promises и async / await.
Я хотел бы привести пример для запроса Ajax.
(Хотя он может быть записан в Javascript, я предпочитаю писать его на Python и компилировать его в Javascript, используя Transcrypt . Это будет достаточно ясно.)
Позволяет сначала включить использование JQuery, чтобы
$
был доступен какS
:__pragma__ ('alias', 'S', '$')
Определить функцию, которая возвращает Promise, в этом случае вызов Ajax:
def read(url: str): deferred = S.Deferred() S.ajax({'type': "POST", 'url': url, 'data': { }, 'success': lambda d: deferred.resolve(d), 'error': lambda e: deferred.reject(e) }) return deferred.promise()
Использовать асинхронный код, как если бы он был синхронным:
async def readALot(): try: result1 = await read("url_1") result2 = await read("url_2") except Exception: console.warn("Reading a lot failed")
\d
- всего одна цифра.
Это регулярное выражение не соответствует строке "123-456-7890"
, но оно будет соответствовать "323"
(которое может быть частью большей строки, например "323-456-7890"
):
(\d) : first digit ("3")
\d : another digit ("2")
\1 : first group (which was "3")
Теперь, если ваша книга притворяется, что (\d)\d\1
должна захватывать "123"
в "123-456-7890"
, тогда она может содержать ошибку ...
(\d)\d\1
шаг за шагом:
\d
соответствует одной цифре ()
отмечают это как группу захвата - это первая цифра, поэтому цифра запоминается как «группа 1» \d
говорит, что есть другая цифра \1
: «вот значение из нашего предыдущего группа 1 "- это цифра, которая была сопоставлена на шаге 1. Итак, как уже говорилось, dystroy: регулярное выражение должно соответствовать последовательности из трех цифр, первая и третья равны .