[英]Can't assign object property inside async function
我有一個異步函數,在其中我使用await來返回對象。
async function createProductsArray(products, numberOfDays) {
if (!products) return [];
var productsArray = [];
for (var i = products.length - 1; i >= 0; i--) {
var product = await productController.read_product(products[i]);
if (product) {
product.total_price = productController.calculate_product_price(product, numberOfDays);
productsArray.push(product);
}
}
console.log(productsArray);
return productsArray;
}
函數calculate_product_price:
exports.calculate_product_price = function (product, days) {
if (days && product.selling_type == 'rental') {
return product.price * days;
}
else {
return product.price;
}
}
由於某些原因,我無法將屬性total_price分配給產品。 它不會出現在此函數的返回對象上。 我嘗試用“ test”之類的靜態值替換屬性值,並檢查對象是否可變(是)。
任何想法為什么這不起作用? 我懷疑這與異步函數中發生的所有這些事情有關,但是我真的不知道為什么。
應該停止函數執行,直到等待productController.read_product()返回一個值,所以這應該可以正常工作嗎?
您有2個async
功能。 您需要同時等待它們。 我假設您正在執行以下操作:
console.log(myProducts, 7);
...在代碼中的某處,日志顯示為空。 但是您還需要將其包裝在await
,因為createProductsArray
也是異步的:
await console.log(myProducts, 7);
原來,我正在嘗試修改來自Mongoose查詢的對象。
但是,Mongoose不會返回普通的Javascript對象,因此無法對其進行修改。 我通過將lean()添加到Mongoose查詢中解決了這一問題。
此問題的更多信息: 為什么不能修改貓鼬查詢返回的數據(例如:findById)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.