bluebird中map的方法如何实现类似于for循环中的continue?
发布于 9 年前 作者 infinite-sky 5700 次浏览 最后一次编辑是 8 年前 来自 问答

continue.png

就是如图的问题用map的方法实现循环,如果要实现退出循环直接用return bluebird.reject()就好,但是想实现类似于continue的行为肿么办呢,看了蛮久 mongoose的api也没找到方法,求各位高手指点一下 - -

7 回复

你是想取消某个promise? 自豪地采用 CNodeJS ionic

@reverland 是的呢,想在符合条件的时候退出,不传到下面一个then里面去了

@infinite-sky 看了下,bluebird有cancel,当然应该也能自己用外部flag标记状态在下一个then中侵入式的判断flag来实现取消。。。 自豪地采用 CNodeJS ionic

看这代码,意思是consdata无效的话,不执行吧?那直接 return 就行了吧。

if (!consdata) return;
db.findOne({account: consdata})
  .then()
  ....

@klesh 直接return相当于for循环的break;但是要实现类似于continue;的行为要用到cancel( ),但是不会用。。。api上貌似没有讲用法。。。

@infinite-sky 你一个promise又不会影响其它的,直接抛异常行么。。。⊙▽⊙ 自豪地采用 CNodeJS ionic

var Promise = require('bluebird');

var array = [1, 2, 3];

Promise.map(array, function(n) {
  if (n == 2) return;

  return new Promise(function(resolve, reject) {
    process.nextTick(function() {
      resolve(n * 2);
    });
  }).then(function(result) {
    console.log(result);
  });
});

output:

2
6

是不是要这种效果,类似于 for 中的 continue

至于说到 break , 那只有抛出异常,或者 return Promise.reject() 才是 break 的效果。不知我理解可否正确?

回到顶部