如何在循环函数中解决承诺
- 如何在循环函数中解决承诺 推荐度:
- 相关推荐
如何在循环函数中解决承诺
我正在尝试发出多个异步请求,然后使用for循环将获得的数据推入数组。但是,我遇到了一个问题,即forloop本身不会返回解决promise所需的值。因此,如何在for循环中完成promise并确保在为GET方法呈现它之前填充数组。对不起,我的英语不好。我对异步概念还是陌生的,如果可能,请用简单的语言教我。另外,如果有更好的方法可以解决我想知道的问题。
const currencyName = ["btc", "eth", "xrp"];
let dataCollections = [];
for (i = 0; i < currencyName.length; i ++) {
dataCollections.push(new Promise(function(resolve, reject) {
request.get(`/${currencyName[i]}jpy`, function(error, response, body) {
if (error) {
reject(error);
} if (dataCollections.length === 3) {
dataColletions = [];
} else {
resolve(JSON.parse(body));
}
});
}));
}
//Promise.all(??).then(??)
//For rendering dataCollections
app.get("/", function(req, res) {
res.render("home", {dataCollections: dataCollections});
}
回答如下:1)考虑将数组currencyNames
命名为复数,以便您可以为迭代器currencyName
命名。
2)您的for循环正在重新发明array.map
函数。考虑改用array.map
。
3)您的for循环有一个不可能的if子句(if (dataCollections.length === 3)
),这也意味着else子句在错误的if语句上。我认为这是一个错字。
现在是您的问题的核心,是Proimse.all(Array<Promise>)
是您想要的;当其参数中的所有元素都解析后,它就会解析。
const currencyNames = ["btc", "eth", "xrp"];
let dataCollections = currencyNames.map(currencyName => new Promise((resolve, reject) =>
request.get(`https://apiv2.bitcoinaverage/indices/global/ticker/${currencyName}jpy`, (error, response, body) => {
if (error)
reject(error);
else
resolve(JSON.parse(body));
})));
//For rendering dataCollections
app.get("/", async (req, res) =>
res.render("home", {dataCollections: await Promise.all(dataCollections)}));
最新文章
- 性能测试案例
- CNN中卷积和池化计算公式
- DataGridView.BorderStyle 属性
- cocos Creator打包
- SNMP
- json php 传输,使用JSON实现数据的跨域传输的php代码
- mingw+msys windows下配置
- java文件下载错误提示
- Socket网络编程详解
- R统计绘图
- mmap如何使用?
- 软件兼容性与软件兼容性测试
- Ext 2 概述
- 全国计算机考试如何查准考证号
- Solidity介绍
- Linux直接在通过终端打开图片文件
- Shiro详解
- Shiro系统权限管理、及原理剖析
- 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用
- Qt SQL:QSqlField、QSqlRecord、QSqlIndex、QSqlError