批量删除 如何用bluebird改造
发布于 1个月前 作者 p412726700 294 次浏览 来自 问答

这是当前的代码,用了async模块

async.eachSeries(ids, function (id, callback) {
    Article.remove({_id: id}, function (err) {
      if (err) {
        callback(err);
      }
    })
  }, function (err) {
    if (err) {
      return handleError(res, err);
    }
    return res.send(204);
  });

求助用bluebird怎么做 谢谢

6 回复

同问,目前我是这样处理的感觉不好.

    return new Promise(function(resolve,reject){
        async.each(ids, function(id,cb){
            XXXXX;
            cb()
        }, function(err){
            if(err) reject(err)
            else resolve()
        })
    })
var remove = Promise.promisify(Article.remove)
Promise
  .resolve(ids)
  .map(function (id) {
    return remove({ _id: id })
  })
  .then(function (results) {
    res.sendStatus(204)
  })
  .catch(next)

@haio 这样写报错了 code.jpg

err.png

我修改了一下

var remove = function (id) {
  return new Promise(function (resolve, reject) {
    Article.remove({_id: id}, function (err) {
      if (err) {
        reject(err);
      }else{
        resolve();
      }
    });
  });
};
Promise
  .map(ids, function (id) {
    return remove(id);
  })
  .then(function (results) {
    return res.send(204);
  })
  .catch(function (err) {
    return res.send(500, err);
  });

这样写能跑通 就是不知道符合规范不

@p412726700 可以,resolve应该写在else里

if (err) {
    reject(err);
} else {
    resolve();
}

@haio 啊?2了 2了 多谢

回到顶部