XMLHttpRequest Promise,嵌套在一些同步代码中

时间:2018-10-11 16:38:56

标签: javascript asynchronous promise xmlhttprequest synchronous

为什么不建议使用sync xmlhttprequest?

如果浏览器等待数据而不是等待数据,我将不胜感激 将其打开以进一步单击,而无需完成数据查询。

我想编写一个程序,而后一步又一步。 此外,代码应该适当地结构化,我想知道如何 我可以在没有承诺的情况下实现这一目标。

是否有xmlhttprequest的同步替代品,而该替代品未“弃用”?

谢谢 托马斯

1 个答案:

答案 0 :(得分:1)

  

为什么不建议使用sync xmlhttprequest?

因为它阻止了Event Loop,并给最终用户带来了糟糕的用户体验。

基本上,它会在页面发生时“冻结”它。

  

如果浏览器等待数据,我将不胜感激

这不是浏览器的工作方式。幸运的是,通过实践,浏览器 的工作方式开始变得非常有意义-足以使以前主要使用同步I / O的语言(如Python)也可以添加“承诺”。

  

我只想编写一个程序,而后一个步骤就可以了。

您可以在JavaScript中return responses from asynchronous calls。使用异步/等待代码看起来非常相似且可读。参见the async function mdn page

  

此外,代码应该正确地结构化,我想知道如何在没有承诺地狱的情况下实现这一目标。

“承诺地狱”指的是一旦某个函数对它调用的所有其他函数执行I / O操作,则该事实。我不认为这是一件坏事,或者

async function sequence() {
   let one = await fetch('/your-endpoint?someParam').then(x => x.json());
   // do something with one
   let param = one.param;
   let two = await fetch('/your-other?param=' + param).then(x => x.json());
   // do something with second call
}
sequence();

也就是说,异步/等待使您可以同步编写异步代码。

不要期望一次全部理解-没关系,这需要时间。