سلام استاد وقت بخیر
استاد تابعی ایجاد کردم تا ایدی که از صفحه میاد رو درونش یه سری کارهارو انجام بدم و جوابش رو return کنم به صفحه
اینکار رو انجام میدم ولی چون تابع از نوع async تعریف شده وقتی به صفحه ارسال میشه پرامیس در حال pending هست و وقتی از then و... توی صفحه استفاده میکنم مقادیر رو نشون نمیده و خالی نشون میده
در صورتی که وقتی console.log میگیرم مقادیر رو نشون میده
درواقع وقتی لاگ میگیرم نشون میده
اما توی صفحه چاپ نمیکنه مقادیر رو
میشه در این مرود راهنماییم کنید
<td><span>
<% orderProductName(order._id).then(res=>{ %>
<% res.map(item=>{ %>
<%= item.title %>
<% console.log(item.title) %>
<% }) %>
<% }) %>
</span></td>
//کدهای صفحه
const orders = await Order.find({user:req.user}).sort({createdAt:"desc"})
let arr=[]
const orderProductName = async(id)=>{
for(let order of orders){
for(let o of order.products){
arr.push(o.id)
}
}
const products = await Product.find({_id:arr})
return products
}
سلام دوست من
اینکار باید در بک اند انجام بشه و داده به فرانت ارسال بشه نه خود پرامیس
دلیلش این هست که موتور های قالب تنها داده ایی که الان در دستشون هست رو نشون میدن و وقتی ما از then استفاده میکنیم یعنی داره قرار به دستمون برسه و نشون داده بشه که موتورهای قالب نمیتونن منتظر بمونن پس خالی نشون میدن.
پس کدت رو طوری بنویس که مستقیم داده بفرستی جهت نمایش
استاد وقتی کلا تابع رو async تعریف میکنم [object Promise] نمایش داده میشه توی صفحه
در صورتی که من فقط داده رو حاضر اماده دارم return میکنم
try {
const orders = await Order.find({user:req.user}).sort({createdAt:"desc"})
const orderProductsName = async(id)=>{
const order = await Order.findOne({_id:id})
// return order
return "salam"
}
return res.render("page/userAccount/orders",{
orders,
getTime,
formatDate,
orderProductsName: await orderProductsName,
})
} catch (err) {
return page500(req,res)
}
تا تابع orderProductsName رو از نوع async میکنم اونطوری میشه