почему RegExp конструктор замораживает браузер, но буквальный синтаксис нет? [Дубликат]

Вопрос был:

Как вернуть ответ от асинхронного вызова?

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")

26
задан Smurfette 25 July 2013 в 16:58
поделиться

4 ответа

28
ответ дан Quentin 5 September 2018 в 08:09
поделиться

Внутри кода, в котором вы создаете строку, обратная косая черта сначала является символом escape-кода javascript, что означает, что escape-последовательности, такие как \t, \n, \" и т. д., будут переведены в их javascript-аналог (вкладка, новая строка, цитата и т. д.), и это будет сделано частью строки. Double-backslash представляет собой одиночную обратную косую черту в самой собственно строке, поэтому, если вам нужна обратная косая черта в строке, вы сначала избегаете ее.

Итак, когда вы создаете строку, говоря var someString = '(\\s|^)' re действительно делает создание фактической строки со значением (\s|^).

12
ответ дан Joe Enos 5 September 2018 в 08:09
поделиться

\ используется в Strings для вызова специальных символов. Если вам нужна обратная косая черта в вашей строке (например, для \ in \ s), вам нужно избежать ее с помощью обратного слэша. Итак, \ становится \\.

EDIT: Даже нужно было сделать это здесь, потому что \\ в моем ответе обратился к \.

3
ответ дан schlicht 5 September 2018 в 08:09
поделиться

Regex нуждается в строчном представлении \s, которое в JavaScript может быть получено с использованием литерала "\\s".

Вот живой пример, чтобы проиллюстрировать, почему "\s" недостаточно:

alert("One backslash:          \s\nDouble backslashes: \\s");

Обратите внимание, как дополнительный \ перед \s изменяет выход.

3
ответ дан Wiktor Stribiżew 5 September 2018 в 08:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: