簡體   English   中英

在JavaScript / Node.js中運行.map時,如何跳過回調?

[英]How do I skip a callback when running .map in JavaScript/Node.js?

這種問題的后遺症,我需要在POST請求中接受多個對象,然后為每個對象處理它,將其保存,然后將保存的對象返回到前端(以便客戶端可以看到成功編輯了哪些列) )。

當我使用.map時,它確實保存到數據庫中,我可以確認這一點。 但是,我有兩個問題:

  1. 它不執行res.locals.retval.addData(dtoObject); 正確,並且我返回的有效負載內部沒有數據傳輸對象。
  2. 我的對象驗證無法在map的回調內部完成。 我最初嘗試過reduce ,但是那根本不起作用,只是將所有相同的值保存到每個數據庫對象中。 在映射無效的JSON對象時,如何排除它們?

     var jsonObjects = req.body; //for (var n in req.body) { var promises = jsonObjects.map((jsonObject) => { var transform = new Transform(); // VALIDATION OF jsonObject VARIABLE IS HERE if (jsonObject.id == 0) { var databaseObject = Database.getInstance().getModel(objectName).build(jsonObject); transform.setNew(true); transform.setJsonObject(jsonObject); transform.setDatabaseObject(databaseObject); transform.baseExtract() .then(() => transform.extract()) .then(() => transform.clean()) .then(() => transform.getDatabaseObject().save()) .then(function(data) { // PROCESSING DATA }).catch((e) => { // ERROR }); } else { var queryParameters = { where: {id: jsonObject.id} }; console.log("Query parameters: "); console.log(queryParameters); Database.getInstance().getModel(objectName).findOne(queryParameters).then((databaseObject) => { transform.setJsonObject(jsonObject); transform.setDatabaseObject(databaseObject); }) .then(() => transform.baseExtract()) .then(() => transform.extract()) .then(() => transform.clean()) .then(() => transform.getDatabaseObject().save()) .then((data) => { // PROCESSING DATA }).catch((e) => { // ERROR }); } }); Promise.all(promises) .then((results) => { return next(); }).catch((e) => { throw e; }); 

這是產生的有效負載:

{
  "errors": [],
  "warnings": [],
  "data": []
}
  1. 正如@KevinB在評論中所說,您錯過了箭頭函數內部的return調用,因此數據庫保存正在進行,因為它們是Promise鏈的一部分,但推送到響應的請求被暫停,等待返回,然后Express.js調用在Promises之前解析。 添加return Database.getInstance()並將return Database.getInstance() return transform.baseExtract()到您的代碼中以解決此問題。
  2. 使用Array.prototype.filter()刪除要忽略的元素,因為您將不需要對它們執行Promises,然后在結果數組上調用Array.prototype.map() 如果您不想使用箭頭功能,可以將其指定為要filtermap的參數:

    jsonObjects.filter(function(jsonObject){

    }, 這個);

    var promises = jsonObjects.map(function(jsonObject){

    }, 這個);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM