Почему бы не использовать syn c версию asyn c API, как в XHR? - PullRequest
0 голосов
/ 26 мая 2020

В моей голове была идея, что все WebAPI являются async, потому что вещи обрабатываются вне среды выполнения JavaScript. Но я узнал, что могу отправлять XMLHttpRequest запросов синхронно. Так что у меня есть несколько вопросов по этому поводу.

Являются ли XMLHttpRequest API частью Javascript среды выполнения? Если да, то как можно отправлять запросы асинхронно? Почему бы не реализовать другие полезные API для Javascript, не отображая их как WebAPI s?

Являются ли XMLHttpRequest API частью WebAPI s? Тогда почему нет других синхронных API? Почему не setTimeout синхронный API?

1 Ответ

2 голосов
/ 26 мая 2020

Являются ли API XMLHttpRequest частью Javascript среды выполнения?

Это зависит от того, что вы подразумеваете под «JavaScript время выполнения». Они не являются частью стандартной библиотеки JavaScript, нет. Они предоставляются хостом в веб-браузерах.

Являются ли API XMLHttpRequest частью WebAPI?

Да, это веб-API.

Тогда почему нет других синхронных API?

Есть. Например, почти все операции DOM синхронны. Но вещи, которые потребуют значительного количества времени (например, сетевые запросы) и инициируются из основного потока пользовательского интерфейса (где JavaScript запускается в браузерах по умолчанию), лучше всего выполнять асинхронно, чтобы избежать блокировки этого потока и предотвращения обновлений пользовательского интерфейса. . Таким образом, XMLHttpRequest по умолчанию является асинхронным c (и использование флага для синхронизации становится устаревшим), fetch всегда является асинхронным c, а различные другие операции, которые могут занять время, являются асинхронными.

В современной среде ¹ использовать asyn c API так же просто, как использовать синхронные API, благодаря async функциям:

async function showMoreData() {
    const response = await fetch("/more/data/please");
    if (!response.ok) {
        throw new Error("HTTP error " + response.status);
    }
    const data = await response.json();
    for (const entry of data) {
         // ...do something...
    }
}

¹ «современные среды» - большинство браузеров поддержка async теперь работает изначально, и если вам нужно настроить таргетинг на IE11 или другие устаревшие браузеры (что, к сожалению, многие из нас делают!), вы можете использовать такие инструменты, как Babel, для преобразования вашего современного кода в старый код, который будет работать в этих средах. Вы пишете актуальную информацию, они превращают ее в то, что может понять IE11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...