CNode

bluebird中map的方法如何实现类似于for循环中的continue?

问答
Iinfinite-sky发布于11 年前最后回复11 年前7 回复6443 浏览0 收藏

continue.png

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

查看回复

回复 (7)

R
reverland#1·11 年前

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

I
infinite-sky#2·11 年前
引用 reverland你是想取消某个promise? 自豪地采用 CNodeJS ionic

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

R
reverland#3·11 年前
引用 infinite-sky@reverland 是的呢,想在符合条件的时候退出,不传到下面一个then里面去了

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

K
klesh#4·11 年前

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

if (!consdata) return;
db.findOne({account: consdata})
  .then()
  ....
I
infinite-sky#5·11 年前
引用 klesh看这代码,意思是consdata无效的话,不执行吧?那直接 return 就行了吧。

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

K
klesh#7·11 年前
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 的效果。不知我理解可否正确?

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