javascript - 没有从 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,
};
})
);
解决方案
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);
}
推荐阅读
- python - 如何使用用户名而不是用户 ID 从管理页面导出模型?
- alert - Nagios - 如何设置警报频率?
- r - 在现有函数对象的正文中添加一行
- java - 为什么我们必须在 while-true 循环中填充缓冲区?
- django - (djstripe.C001) 找不到 Stripe API 密钥。提示:将 STRIPE_TEST_SECRET_KEY 和 STRIPE_LIVE_SECRET_KEY 添加到您的设置中
- amazon-web-services - 如何在 StepFunction 状态机执行事件历史记录中获取胶水作业的资源链接?
- intellij-idea - IntelliJ CodeStyle Java - 换行 if 语句
- arrays - 修改工作公式以忽略空白单元格和指定字符(“-”)
- reactjs - React JS 在 IIS 上托管后无法正常工作
- django - 我如何使 django 模型字段唯一但仅适用于个人用户?