CNode

批量删除 如何用bluebird改造

问答
Pp412726700发布于12 年前最后回复12 年前6 回复4937 浏览0 收藏

这是当前的代码,用了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怎么做 谢谢

查看回复

回复 (5)

I
i5ting#1·12 年前

数组map

H
haio#2·12 年前
var remove = Promise.promisify(Article.remove)
Promise
  .resolve(ids)
  .map(function (id) {
    return remove({ _id: id })
  })
  .then(function (results) {
    res.sendStatus(204)
  })
  .catch(next)
P
p412726700#3·12 年前
引用 haio

@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);
  });

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

H
haio#4·12 年前
引用 p412726700@haio 这样写报错了 我修改了一下 这样写能跑通 就是不知道符合规范不

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

if (err) {
	reject(err);
} else {
	resolve();
}
P
p412726700#5·12 年前
引用 haio@p412726700 可以,resolve应该写在else里

@haio 啊?2了 2了 多谢

参与回复
登录后即可参与回复。登录