首页 > 解决方案 > Javascript 获取变量问题

问题描述

平庸的javascript开发人员在这里需要一些帮助..

我想在 for 循环中多次对 url 进行 GET 调用。

我正在尝试使用 fetch,但由于承诺/时间情况,我无法弄清楚如何使其工作。

下面是代码,完全有可能 fetch 方法对我想要做的事情没有意义。非常感谢您帮助我编写代码或告诉我我是白痴并建议替代方案:)

var fromAmt = 100;
var fromOOP = 50;
var fromGM = 50;
var fromCur = "USD"
var toCur = ["USD","EUR","INR","GBP","SGD"];

var adjAmt = [];

async function getConversionAsync(fcur,tcur,amt) 
{
  let response = await fetch('https://data.fixer.io/api/convert?access_key=xyxyxyxyxyxyxy&from=' + fcur + '&to=' + tcur + '&amount=' + amt);
  let data = await response.json()
  return data;
}

for (i = 0; i < toCur.length; i++) {

getConversionAsync(fromCur,toCur[0].toString(),fromAmt)
  .then(data => display(data));

}


function display(thing){
adjAmt.push(thing.result);
}

document.getElementById("something").innerHTML = adjAmt[0].toString();

标签: javascriptapifetch

解决方案


在您的示例中,document.getElementById("something").innerHTML = adjAmt[0].toString();在将任何内容推送到adjAmt. 在显示结果之前,您需要等待循环调用完成,为此您可以将所有内容包装在异步函数中。

const fromAmt = 100;
const fromOOP = 50;
const fromGM = 50;
const fromCur = 'USD';
const toCur = ['USD', 'EUR', 'INR', 'GBP', 'SGD'];

const adjAmt = [];

const getConversionAsync = async (fcur, tcur, amt) => {
    const response = await fetch(`https://data.fixer.io/api/convert?access_key=xyxyxyxyxyxyxy&from=${fcur}&to=${tcur}&amount=${amt}`);
    return response.json();
}

function display(thing) {
    adjAmt.push(thing.result);
}

(async () => {
    for (i = 0; i < toCur.length; i += 1) {
        const data = await getConversionAsync(fromCur, toCur[0], fromAmt);
        display(data);
    }
    document.getElementById('something').innerHTML = adjAmt[0].toString();
})();


推荐阅读