3

Firebase DataSnapshotから始めて、平易な英語で「すべての子が条件に失敗した場合、何かを実行する」ようにしたいと考えています。

これが私が今持っているものです:

     appleappsRef.on('value', function (allApplesSnapshot){
            allApplesSnapshot.forEach(function (appleSnapshot) {
                if (condition) {
                   //execute code
                } 
            });             
      });   
4

4 に答える 4

3

docsに従って、 forEach コールバックは true を返して列挙をキャンセルでき、 forEach() は true を返して列挙がキャンセルされたことを通知します。

これは、次のことができることを意味します。

appleappsRef.on('value', function (allApplesSnapshot){
  var foundOne = allApplesSnapshot.forEach(function (appleSnapshot) {
    if (condition) {
       return true; // found one, cancel enumeration
    }
  });
  if (!foundOne) {
    // all children failed the condition.
  }
});
于 2012-05-29T00:16:50.490 に答える
2

条件が真であることがわかった場合は、ブール値を使用して.forEachを使用して追跡できます。

 appleappsRef.on('value', function (allApplesSnapshot){
        var foundOne = false;
        allApplesSnapshot.forEach(function (appleSnapshot) {
            if (condition) {
               foundOne = true;
            } 
        });             
        if (!foundOne) {
            // all children failed the condition
        }
  });   
于 2012-05-28T20:57:06.360 に答える
2
if (allApplesSnapshot.every(function (appleSnapshot) { return !condition; }))
    // ...

Array.every配列のすべての要素が渡された関数を満たす場合に返しますtrue(つまり、その要素が渡された場合、関数は true を返します)。したがって、すべての要素が条件を満たさないかどうかをテストするには、関数内の条件を単に否定します

一部のブラウザは をサポート していませんArray.everyが、サポートするすべてのブラウザArray.forEachは もサポートする必要があることに注意してくださいArray.every

于 2012-05-28T20:32:15.887 に答える
0

ええと、いつでもそれをループして、いつでも子パスの 1 つが何らかの形でメソッドから抜け出すことができます。それ以外の場合は、すべての子が失敗したときに起動する必要があるメソッドを起動します。この場合、ブール値を使用することもできます。

例: ブール値を作成し、それを allChildrenFailed と呼び、デフォルトで true に設定します。foreach ループを通過し、いずれかの子がパスした場合は false に変更します。次に、allChildrenFailed が true の場合にのみ、ループの後に必要なメソッドを起動します。

于 2012-05-28T20:33:13.443 に答える