gpt4 book ai didi

javascript - forEach 循环中的异步 API 调用

转载 作者:行者123 更新时间:2023-11-30 09:19:13 26 4
gpt4 key购买 nike

我遇到了一个我似乎无法解决的问题,我猜我在异步行为方面遗漏了一些要点。

任务相对简单:需要将装有不同货币的钱包转换成单一货币。我想从以下 API 获取汇率:

https://free.currencyconverterapi.com/api/v5/convert?q= ${from}_${to}&compact=y

${from} 为起始货币,${to} 为目标货币。

我将不同的货币存储在一个名为 positions 的对象中,如下所示:

[
{'currency': "EUR",
"amount": 10},
{'currency': "CNY",
"amount": 100},
]

因此任务是将 100EUR 和 100CNY 转换为美元。

为了收集汇率,我想遍历以下函数中的单个头寸:

    collectExRates(targetCurrency) {
let exRatesDict = {}
this.positions.forEach( (position) => {
exRatesDict[position.currency] = this.parseUrl(position.currency, targetCurrency)
});
return exRatesDict
}

并且 parseUrl 是:

    parseUrl(from, to) {
const exRateName = from + '_' + to;
var rate;
return fetchUrl(`https://free.currencyconverterapi.com/api/v5/convert?q=${from}_${to}&compact=y`, function(error, meta, body){
rate = JSON.parse(body)[exRateName].val
console.log("RATE", rate)
return rate
});
}

我已经尝试了一些事情(比如创建异步 forEach、Promises、异步等待等),但我无法得到预期的结果,即返回将货币映射到它各自的汇率字典汇率。

我将非常感谢任何帮助。

最佳答案

问题是异步方法返回 Promise,你需要等待它们解决。接下来是执行此操作的常见模式:

Promise.all(arr.map(v => someAsyncFunc(v))).then((resolvedValues) => {
resolvedValues.forEach((value) => {
// Do your stuff here
});
});

所以基本上你是在初始化一堆异步调用,等待它们用 Promise.all 解析,然后才对解析的数据执行一些操作。

关于javascript - forEach 循环中的异步 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52895277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com