TypeError:无法读取转换应用程序中未定义的属性如何解决

问题描述 投票:0回答:2

运行以下语句后,它在控制台选项卡中显示以下错误

在控制台中运行命令

convert(100, 'CAD', 'USD')

运行上述转换语句请求后控制台中显示错误

`因承诺拒绝而暂停 TypeError:无法读取未定义的属性

在代码64行处 这里

 
常量利率 = ratesByBase[from].rates[to];`

以下是我的完整代码库

let currencies = {
    AUD: 'Australian Dollar',
    BGN: 'Bulgarian Lev',
    BRL: 'Brazilian Real',
    CAD: 'Canadian Dollar',
    CHF: 'Swiss Franc',
    CNY: 'Chinese  Yuan',
    CZK: 'Czech Republic Koruna',
    DKK: 'Danish Krone',
    GBP: 'British Pound Sterling',
    HKD: 'Hong Kong Dollar',
    HRK: 'Croatian Kuna',
    HUF: 'Hungarian Forint',
    IDR: 'Indonesian Rupiah',
    ILS: 'Israeli New Sheqel',
    INR: 'Indian Rupee',
    JPY: 'Japanese Yen',
    KRW: 'South Korean Won',
    MXN: 'Mexican Peso',
    MYR: 'Malaysian Ringgit'
 }

 const fromSelect = document.querySelector('[name="from_currency"]');
 const toSelect = document.querySelector('[name="to_currency"]');
 const fromInput = document.querySelector('[name="from_amount"]');

 let myHeaders = new Headers();
 myHeaders.append("apikey", "QC9I9O0LPCFUfStGMD1h5CKcWN4Aehrk");

 let requestOptions = {
    method: 'GET',
    redirect: 'follow',
    headers: myHeaders
 };

 const endpoint = "https://api.apilayer.com/currency_data/live";

 let ratesByBase = {};


 function generateOptions(options) {
    return Object.entries(options)
       .map(([currencyCode, currencyName]) =>
          `<option value="${currencyCode}">${currencyCode} - ${currencyName}</option>`)
       .join("");
 }

 async function fetchRates(base = "USD") {
    const res = await fetch(`${endpoint}?base=${base}`, requestOptions);
    const rates = await res.json();
    return rates;
 }

 async function convert(amount, from, to) {
    // first check if we even have the rates to convert from that currency
    if (!ratesByBase[from]) {
       console.log(`Oh no! we don't have ${from} to convert it ${to}, so let 's go get it`);
       const rates = await fetchRates(from);
       console.log(rates);
       // store them for next time
       ratesByBase[from] = rates;
    }

    const rate = ratesByBase[from].rates[to];
    const convertedAmount = rate * amount;
    console.log('${amount} ${from} is ${convertedAmount} in ${to}');
    return convertedAmount;

 }

 const optionsHTML = generateOptions(currencies);
 // populate the options elements
 fromSelect.innerHTML = optionsHTML;
 toSelect.innerHTML = optionsHTML;
javascript caching promise typeerror unhandled-promise-rejection
2个回答
0
投票

我已完成所有步骤,但我不会从此优惠中获得奖励该步骤进行 0.60 美元最低存款用户必须玩才能保留奖励仅限新用户我将遵循此步骤我进行 0.60 美元存款并玩,我是新用户请速查并给价


-1
投票

“ratesByBase[from]”可能未定义。

使用打字稿:const rates = ratesByBase[from]?.rates[to];

使用 javascript: const rates = ratesByBase[from] ? ratesByBase[from].rates[to] : 0;

© www.soinside.com 2019 - 2024. All rights reserved.