【发布时间】:2020-12-04 01:21:52
【问题描述】:
我在猫鼬中有这个更新查询。它有 1600 个帖子,运行大约需要 5 分钟。
瓶颈是什么?我是否使用了错误的方法?
export const getAndStoreLatestKPI = async () => {
console.log("start kpi");
try {
const marketCaps = await getKPI();
const stocks = await mongoose.model("stock").find().exec();
for (const stock of stocks) {
const marketCap = marketCaps.find(
(marketCap) => marketCap.i === stock.insId
);
if (marketCap != null) {
const marketCapAdjustedVal =
stock.country === "Finland" ? marketCap.n * 10 : marketCap.n;
const update = {
marketCap: marketCapAdjustedVal,
};
console.log(marketCapAdjustedVal);
await mongoose
.model("stock")
.findOneAndUpdate({ insId: stock.insId }, { update });
}
}
console.log("done");
return Promise.resolve();
} catch (err) {
return Promise.reject(err);
}
};
export const getKPI = async (kpiId: number) => {
try {
const kpiFetch = await Axios.get(someurl);
return Promise.resolve(kpiFetch.data.values);
} catch (err) {
return Promise.reject(err);
}
};
【问题讨论】:
-
什么是
marketCaps?是另一个系列吗?为什么不等待它返回的承诺呢? -
我从外部 api 获取它。我在等待它?
-
否,或者是。这取决于 API 是否返回承诺。我猜它是否对您有用,那么您不必等待它
-
@TomSlabbaert 我添加了 getKPI 函数。它是在回报一个承诺吗?
-
一个
async函数默认总是返回一个promise。即使实际功能实际上并没有做任何异步操作。 (在这种情况下不正确,因为Axios.get是异步的)。