Home > other >  How can I get value in [Object]
How can I get value in [Object]

Time:02-15

I'm working on coinmarketcap.com api and I need only name and price and save to Mongo. It is working but at the end undefined value returned. Price value is under the quote. What is wrong ?

const axios = require('axios');
let response = null;
new Promise(async (resolve, reject) => {
  try {
    response = await axios.get('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?limit=2', {
      headers: {
        'X-CMC_PRO_API_KEY': 'myKey',
      },
    });
  } catch(ex) {
    response = null;
    console.log(ex);
    reject(ex);
  }
  if (response) {
  const coin = response.data;
  console.dir(coin, { depth: null }); 
  console.log(coin.data.map(a => { a.name,  a.quote.price}));
    resolve(coin);
  }
}
);

CodePudding user response:

You shuldn't be wrapping this in another Promise (see: What is the explicit promise construction antipattern and how do I avoid it?) , just make a method which is async

async function getCoin(){
  try {
    const response = await axios.get('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?limit=2', {
      headers: {
        'X-CMC_PRO_API_KEY': 'YOURKEY',
      },
    });
    const coin = response.data;
    console.dir(coin, { depth: null }); 
    return coin;
  } catch(ex) {
    console.log(ex);
    throw ex;
  }
}

CodePudding user response:

quote contains prices identified by their keys like this:

"quote": {
                "USD": {
                    "price": 42177.91536878145,
                    "volume_24h": 18068350418.6717,
                    "volume_change_24h": 8.1323,
                    "percent_change_1h": -0.02144759,
                    "percent_change_24h": -0.48235688,
                    "percent_change_7d": -0.65364542,
                    "percent_change_30d": -1.87762517,
                    "percent_change_60d": -13.80076009,
                    "percent_change_90d": -30.24448455,
                    "market_cap": 799599134284.9932,
                    "market_cap_dominance": 42.7605,
                    "fully_diluted_market_cap": 885736222744.41,
                    "last_updated": "2022-02-14T09:35:00.000Z"
                }
            }

so in order to solve the bug, you need to specify the proper key here (USD for example):

I tested this code and it works please copy it inside the separate js file and check the result(Replace your API key):

const axios = require('axios');
let response = null;
async function getCoin(){
  try {
    const response = await axios.get('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?limit=2', {
      headers: {
        'X-CMC_PRO_API_KEY': 'KEY',
      },
    });
    const coin = response.data;
    const result = coin.data.map(a => ({ name: a.name,  price: a.quote['USD'].price}))
    console.log(result)
    return coin;
  } catch(ex) {
    console.log(ex);
    throw ex;
  }
}
getCoin()

CodePudding user response:

const axios = require("axios");

async function fetchData() {
  try {
    const response = await axios.get(
      "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?limit=2",
      {
        headers: {
          "X-CMC_PRO_API_KEY": "myKey",
        },
      }
    );

    return [response, null];
  } catch (error) {
    return [null, error];
  }
}


// in your calling function code base
const [response,error] = await fetchData()

if(response){
    // handle response object in calling code base
    const coin = response.data
}

if(error){
    // handle error explictly in calling code base 
}

CodePudding user response:

Getting price in quote.USD or quote['USD'] and also need to return object of name and price using map.

So Try this:

const axios = require('axios');
let response = null;
new Promise(async (resolve, reject) => {
    try {
        response = await axios.get('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?limit=2', {
            headers: {
                'X-CMC_PRO_API_KEY': '5345bcb4-0203-4374-bef6-d67a89a6d216',
            },
        });
        if (response) {
            const coin = response.data;
            cointData = coin.data.map(a => ({ name: a.name,  price: a.quote.USD.price }))
            resolve(cointData);
        }
    } catch (ex) {
        response = null;
        console.log(ex);
        reject(ex);
    }
});
  • Related