我嘗試列出我發送給客戶的產品串列,但res.send在回圈完成之前執行。你有什么建議嗎?異步/等待似乎不起作用。
這是我的代碼:
const Outfits = require("../models/Outfits");
const Products = require("../models/Products");
module.exports = (req, res) => {
Outfits.find({ outfitId: req.params.id }, async (error1, result) => {
if (error1) {
res.status(400).json({
status: "fail",
});
} else {
let productIds = result[0].productIds;
let productList = [];
for (let i = 0; i < productIds.length; i ) {
await Products.find({ id: productIds[i] })
.then((product) => {
console.log(product);
productList.push(product);
})
.catch((error2) => {
res.status(400).json({
status: "fail",
});
});
}
console.log(productList);
res.status(200).json({
status: "success",
body: productList,
});
}
});
};
非常感謝!
uj5u.com熱心網友回復:
為了一次執行多個異步任務,一種干凈的方法是使用 aPromise.all并傳遞一個異步任務陣列。像這樣:
const Outfits = require("../models/Outfits");
const Products = require("../models/Products");
module.exports = (req, res) => {
Outfits.find({ outfitId: req.params.id }, async (error1, result) => {
if (error1) {
res.status(400).json({
status: "fail",
});
} else {
let productIds = result[0].productIds;
//
const productList = await Promise.all(
productIds.map((id) => Products.findById(id))
);
console.log(productList);
res.status(200).json({
status: "success",
body: productList,
});
}
});
};
uj5u.com熱心網友回復:
你需要像這樣await呼叫Products.find函式
for (let i = 0; i < productIds.length; i ) {
try {
const product = await Products.find({ id: productIds[i] }).exec()
console.log(product);
productList.push(product);
} catch (error) {
res.status(400).json({
status: "fail",
});
}
}
uj5u.com熱心網友回復:
你有什么建議嗎?異步/等待似乎不起作用
您的代碼中的 async/await 不起作用,這是因為 mongoose 為您提供了功能。
回呼風格
// 找到裝備并將裝備傳遞給回呼
Outfits.find({ suitId: req.params.id }, async (error1, suit) => {
// 你的其他邏輯
})
異步/等待風格
// 找到裝備并回傳
常量裝備 = 等待 Outfits.find({outfitId: req.params.id }).exec();
假設您以這種方式檢索產品 ID 陣列
let productIds = result[0].productIds;
const products = await Promise.all(
productIds.map((productId)=>{
return Products.findById(productId)
}
)
這應該檢索您的產品串列
這是我第一次回答問題,因此努力回答哈哈:)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/427372.html
標籤:javascript 节点.js 反应 表示 猫鼬
