【问题标题】:Not receiving the correct data from Promises?没有从 Promises 收到正确的数据?
【发布时间】:2021-12-14 03:06:34
【问题描述】:

我有一个从 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,
      };
    })
  );

【问题讨论】:

    标签: javascript async-await es6-promise


    【解决方案1】:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2021-08-16
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多