javascript - 如何同步获取响应和异步请求?
问题描述
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
outArr = [];
var fetchData = async (str) => {
var b = await fetch('http://api.mathjs.org/v4/?expr=' + str);
var c = await b.json();
console.log(c)
}
function abc(arr) {
len = arr.length;
for (let i = 0; i < len; i++) {
var str = i + '*' + i;
fetchData(str);
}
}
console.log(abc(arr));
你能告诉我如何同步获取http请求的响应并异步点击请求吗?
预期产出
[1、4、9、16、25、36、49、64、81、100]
我尝试了async
等待,但仍然得到异步响应。
我们可以使用promises
吗?如何synchronously
使用 promises 获得响应。
我收到了这个回复
解决方案
您不能使任何异步同步-相反,最好的方法是进行abc
async
每次await
迭代。(如果您不想一次发出所有请求 - 如果您可以一次发出所有请求,请Promise.all
改用)
您还应该注意不要在使用outArr
and时隐式创建全局变量len
。
以下是您将如何做到的await
:
const fetchData = async (str) => {
const b = await fetch('https://api.mathjs.org/v4/?expr=' + str);
return b.json();
}
async function abc() {
const output = [];
for (const i of Array.from({ length: 10 }, (_, i) => i + 1)) {
const str = i + '*' + i;
const result = await fetchData(str);
output.push(result);
}
return output;
}
abc()
.then(output => {
console.log(output);
});
(mathjs 存在证书问题,因此您可能需要在浏览器中添加异常才能使代码段正常工作)
推荐阅读
- javascript - 离子没有检测到控制器
- python - 将排序从 Python2 转换为 Python3
- php - 如何根据 laravel 5.6 中的 id 检查唯一值?
- unit-testing - 通过 SBT 合并 JUnit 结果
- r - get() 闪亮的上传文件的名称
- python - 将列表元素的关键字与 pandas 列匹配
- javascript - 通过函数导出组件时如何保留引用?
- c# - linq如何将符号添加到csv中的空行
- python-2.7 - 用python绘制一个3D条形直方图
- unicode - 如果字体字形不是 Unicode 的一部分,则它们映射到什么字体