2014-03-29 39 views
0

移動應用程序正在向服務器發送要保存到數據庫的記錄數組。服務器將循環訪問記錄數組,保存每個記錄,構建一系列新創建的id,然後將該數組的id返回給應用程序。如何在sails.js中保存記錄時返回id的數組

以下代碼正確保存記錄,但由於javascript的異步性質,當外部函數返回內部函數尚未完成且id數組仍然爲空時。

如何獲得此函數返回它已被填充後的returnIDs數組?

create: function(req, res) { 
    var returnIDs = []; 
    for(var i in req.body){ 
     Test_session.create(req.body[i], function test_SessionCreated(err, test_Session) { 
      if (err) { 
       console.log(err); 
       return res.json(err); 
      } 
      returnIDs.push(test_Session.id); 
     }); 
    } 
    return res.json({ "ids": returnIDs.toJSON}, 200); 
} 

回答

-1

我認爲使用async.js比承諾容易。如果您使用async.js,那麼請執行此操作。

create: function(req, res) { 
    var returnIDs = []; 
    async.each(req.body, function(item, callback) { 
     Test_session.create(item, function(err, test_Session) { 
      if (err) { 
      console.log(err); 
      callback(err); 
      } 
      else 
      callback(); 
     }); 
    }, function(err){ 
     res.json(200, { "ids": returnIDs}); 
    }); 
} 
+0

韋恩,感謝您的快速回復。我試過你的代碼,它返回一個空數組。我是JS的新手,所以請在這裏與我聯繫...在這個例子中更新的returnIDs數組在哪裏? – user2900166

+0

好的,所以我添加了「returnIDs.push(test_Session.id);」就在異步調用和IT WORKS結束時的回調之前!再次感謝! – user2900166

+0

oop,我忘記'array.push()' – wayne

相關問題