不使用异步标志的XHR中类似同步的行为

时间:2019-07-02 23:26:58

标签: javascript reactjs asynchronous xmlhttprequest

众所周知,XHR具有一个标志,允许用户在open中指定异步/同步请求。

我有一个请求项的JSON列表。我有一个名为history的React状态数组,它显示对用户的每个请求的列表。

我的React组件层次结构如下

App -> HttpRequest -> RequestAutomate

当前,所有事情都像这样

<RequestAutomate Component>
for each request in JSON list:
    this.props.submit(request)

<HttpRequest Component>
submit(request)
    xhr.open(request.verb, request.url, false) // note async set to false
    set the body and header with request.body and request.header
    xhr.send
    callback if xhr.readyState === 4
        this.props.addHistory(request object that was made)

<App component>
addHistory(request)
    // add to history state array.

通常,每次修改状态时,React都会重新渲染。由于发送到submit的每个请求都在准备就绪时(并且仅在准备就绪时)添加到history数组中,因此我希望我的程序重新呈现,以便用户可以看到他们的请求被一个接一个地添加。 。

但是,当XHR设置为同步模式时,UI会被阻止重新渲染(如果我错了,请纠正我,这里听起来像个白痴)。因此,UI只会同时重新呈现整个请求历史记录。如果我的请求JSON中有30个请求,则UI将重新呈现并同时显示所有30个请求。我希望他们在运行时一次显示一个。有没有办法在异步模式下使用XHR通过回调的某种组合(或某人能够提供的任何解决方案)来实现此功能

编辑:我应该注意使用同步请求的原因。请求进入时必须按顺序运行,因为请求可能先于一个请求(即请求5可能取决于请求1)。结果,我希望每个请求在下一个请求运行之前完成

0 个答案:

没有答案