首页 > 解决方案 > 没有从 Promises 收到正确的数据?

问题描述

我有一个从 API 获取数据的函数,并且该函数按预期正常工作:

 const getStockData = async (stock) => {
try {
  const response = await axios.get(`${BASE_URL}${stock}${KEY_URL}`);
  console.log(response);
  return response;
} catch (error) {
  console.error('Error', error.message);
}

};

我还有另一个函数从我的 firebase 获取数据,然后将 .ticker 传递到上面的函数中,但是当我记录来自 promise 的响应时,数据返回 null 是否有原因使其无法按预期工作?

const getMyStocks = async () => {
let promises = [];
let tempData = [];
const querySnapshot = await getDocs(collection(db, 'myStocks'));
querySnapshot.forEach((doc) => {
  console.log(doc.data().ticker);
  promises.push(
    getStockData(doc.data().ticker).then((res) => {
      console.log(res);
      tempData = {
        id: doc.id,
        data: doc.data(),
        info: res.data,
      };
    })
  );

标签: javascriptasync-awaites6-promise

解决方案


getMyStocks必须返回它创建的承诺的解决方案......

// to reduce nested promises, this takes an FB doc and adds the getStockData query to it
const getFBAndTickerData = async doc => {
  return getStockData(doc.data().ticker).then(res => {
    console.log(res);
    return {
      id: doc.id,
      data: doc.data(),
      info: res.data,
    };
  });
}

const getMyStocks = async () => {
  const querySnapshot = await getDocs(collection(db, 'myStocks'));
  let promises = querySnapshot.docs.map(doc => {
    console.log(doc.data().ticker);
    return getFBAndTickerData(doc);
  });
  return Promise.all(promises);
}

推荐阅读