Инкапсуляция асинхронных запросов - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь создать небольшой фреймворк javascript, который может облегчить работу со сторонней библиотекой.Эта библиотека в основном асинхронная, поэтому, например, чтобы установить соединение, вы должны использовать код:

var com = establishConnection("api-key");
com.onsuccess = function(c) {
    c.submit("something");
};

Я хочу, чтобы у меня была возможность использовать мою оболочку, чтобы просто выполнять

var com = establishConnection("api-key");
com.submit("something");

Очевидно, что мне нужен способ обработки асинхронной природы исходной библиотеки, поэтому он будет ждать установления соединения, прежде чем выполнять команды.Я знаю, что могу сделать что-то вроде установки флага, чтобы сказать, установлено ли соединение, и затем использовать некоторую задержку зацикливания, то есть

function submit(msg) {
    while (!connectionEstablished) {}
    // do submit stuff
}

, но кажется, что такой уродливый хак, кто-нибудьлюбой совет для более хороших способов сделать это?

1 Ответ

0 голосов
/ 16 ноября 2011

Это был бы единственный способ преобразовать асинхронный запрос в синхронный запрос.

Да, это выглядит ужасно и безобразно; потому что это .

Я знаю, что не знаю всех входов и выходов вашей библиотеки, но я бы посоветовал вам (и вашим пользователям) принять асинхронных запросов, а не пытаться маскировать их. HTTP-запросы асинхронны в JavaScript по определенной причине; они не блокируют браузер. Синхронные запросы полностью блокируют браузер на время запроса. Если вы не будете осторожны, если HTTP-запрос слишком длинный, ваши пользователи получат предупреждение в большинстве браузеров, сообщающее им, что скрипт прекратил выполнение; и предложите им возможность отключить скрипт.

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