封装异步请求

Encapsulating Asynchronous Requests

本文关键字:请求 异步 封装      更新时间:2023-09-26

我正在尝试创建一个小的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
}

但是它看起来像一个丑陋的hack,有没有人有更好的方法来做到这一点的建议?

这是将异步请求转换为同步请求的唯一方法。

是的,它看起来很可怕,很丑;因为它是

我知道我不知道你的库的全部输入和输出,但我建议你(和你的用户)应该接受异步请求,而不是试图屏蔽它们。HTTP请求在JavaScript中是异步的是有原因的;它们不会锁定浏览器。同步请求在请求期间完全锁定浏览器。如果你不小心,如果HTTP请求太长,你的用户会在大多数浏览器上得到一个警告,告诉他们脚本已经停止执行;并为他们提供禁用脚本的选项。