我想执行同步的ajax调用,但是我一直收到警告,不建议使用Synchronous XMLHttpRequest。我在互联网上找到的所有信息都已经有好几年了,所以我犹豫要相信我读到的任何东西。有什么建议么?什么是最佳编码实践?
答案 0 :(得分:0)
同步请求本质上是一种不好的做法。 JavaScript本质上是异步的,请习惯它。
但是,如果要编写与同步代码非常相似的代码,则可以结合使用await
和fetch
来做到这一点:
// Purely asynchronous code
fetch('some-url')
.then(resp => resp.text())
.then(text => console.log(`Fetched content: ${text.substr(0,10)}...`));
// Using async/await
(async () => {
const resp = await fetch('some-url');
const text = await resp.text();
console.log(`Fetched content: ${text.substr(0,10)}...`);
})();
请注意,await
仅可用于异步函数,因此一种实现方法是将代码包装在async
IIFE中。
这样,您可以轻松地编写几个HTTP调用,同时保持统一的代码结构,这是一个好习惯!
如果您不关心进行HTTP调用的顺序,则可以使用Promise.all
,它可以生成一个承诺,该承诺将在返回所有HTTP调用后立即解决-例如以下示例:
// like this
Promise.all([
fetch('url-1').then(resp => resp.text()),
fetch('url-2').then(resp => resp.text()),
])
.then([text1, text2] => {
// ...
});
// or like this
(async () => {
const [text1, text2] = await Promise.all([
fetch('url-1').then(resp => resp.text()),
fetch('url-2').then(resp => resp.text()),
]);
// ...
})();