cursor.forEach()中的“继续”

2020/10/05 05:21 · javascript ·  · 0评论

我正在使用meteor.js和MongoDB构建应用程序,但我对cursor.forEach()有疑问。我想在每次forEach迭代的开始时检查一些条件,然后在不需要对它进行操作的情况下跳过该元素,这样可以节省一些时间。

这是我的代码:

// Fetch all objects in SomeElements collection
var elementsCollection = SomeElements.find();
elementsCollection.forEach(function(element){
  if (element.shouldBeProcessed == false){
    // Here I would like to continue to the next element if this one 
    // doesn't have to be processed
  }else{
    // This part should be avoided if not neccessary
    doSomeLengthyOperation();
  }
});

我知道我可以使用cursor.find()。fetch()将光标转换为数组,然后使用常规的for循环对元素进行迭代,并正常使用continue和break,但是我感兴趣的是forEach( )。

的每次迭代forEach()都会调用您提供的函数。要在任何给定的迭代中停止进一步的处理(并继续进行下一项),您只需要return在适当的位置使用函数即可:

elementsCollection.forEach(function(element){
  if (!element.shouldBeProcessed)
    return; // stop processing this iteration

  // This part will be avoided if not neccessary
  doSomeLengthyOperation();
});

在我看来,使用该filter 方法来实现此目标的最佳方法是无意义的,因为在forEach块中返回是没有意义的举个例子:

// Fetch all objects in SomeElements collection
var elementsCollection = SomeElements.find();
elementsCollection
.filter(function(element) {
  return element.shouldBeProcessed;
})
.forEach(function(element){
  doSomeLengthyOperation();
});

这将缩小您的范围elementsCollection,仅保留filtred应处理元素。

这是使用for ofcontinue代替的解决方案forEach


let elementsCollection = SomeElements.find();

for (let el of elementsCollection) {

    // continue will exit out of the current 
    // iteration and continue on to the next
    if (!el.shouldBeProcessed){
        continue;
    }

    doSomeLengthyOperation();

});

如果您需要在循环中使用在内部不起作用的异步函数,这可能会更有用forEach例如:


(async fuction(){

for (let el of elementsCollection) {

    if (!el.shouldBeProcessed){
        continue;
    }

    let res;

    try {
        res = await doSomeLengthyAsyncOperation();
    } catch (err) {
        return Promise.reject(err)
    }

});

})()

利用JavaScript进行短路评估。如果el.shouldBeProcessed返回true,doSomeLengthyOperation

elementsCollection.forEach( el => 
  el.shouldBeProcessed && doSomeLengthyOperation()
);

使用continue语句而不是return可以跳过JS循环中的迭代。

本文地址:http://javascript.askforanswer.com/cursor-foreachzhongdejixu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!