完成每个循环后如何发送响应

Pan*_*rma 1 javascript node.js

Response.json 应在 foreach 循环完成执行后执行

var todoarr = (req.body.data) ? req.body.data : undefined
    todoarr.forEach(function(element) {
         if(element.done == true) {
             TodoService.removeTodo(element, function(success) {
             });   
         }
        }); 
        res.json("success");
Run Code Online (Sandbox Code Playgroud)

Myk*_*yuk 8

你可以尝试使用 async.js http://caolan.github.io/async/

each方法http://caolan.github.io/async/docs.html#each

或者您可以尝试使用Promise.all.

例如:

let promiseArr = [];
todoarr.forEach(function(element) {
     if(element.done == true) {
         promiseArr.push(somePromiseMethod(element)); 
     }
}); 
//now execute promise all
Promise.all(promiseArr)
.then((result) => res.send("success"))
.catch((err) => res.send(err));
Run Code Online (Sandbox Code Playgroud)

更多信息在这里。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

一些承诺示例:

function somePromiseMethod(element) {
   return new Promise((resolve,reject) => {
      TodoService.removeTodo(element, function(success) {
            resolve();
         });
   });    
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。