2

私はphpにif文を持っています:

if ( $isTrue && db_record_exists($id)) { ... } 
else { ... };

最初の条件は、真/偽のブール チェックです。

2 番目の条件は、関数を呼び出して、行がデータベース テーブルに存在するかどうかを確認し、true または false を返します。

Node JS でこの条件文をノンブロッキングになるように書き換えたいと思います。

次のように db_record_exists を書き直しました...

function db_record_exists(id, callback) {
  db.do( "SELECT 1", function(result) { 
    if (result) { callback(true); }
    else { callback(false); }
  );
}

...しかし、ブールチェックを使用して、これをより大きなifステートメントに組み込む方法がわかりません。たとえば、次のステートメントは意味がありません。

if (isTrue and db_record_exists(id, callback)) {
...
}

これを書く「ノード」の方法は何ですか?

アドバイスをいただければ幸いです。

(事前に)ご協力いただきありがとうございます。

4

3 に答える 3

6

最初に変数を確認してから、コールバック内の非同期呼び出しの結果を確認してください。

if (isTrue) db_record_exists(id, function(r) {
    if (r) {
        // does exist
    } else nope();
});
else nope();

function nope() {
    // does not exist
}
于 2013-03-14T20:18:00.470 に答える
1

ifとelseの部分にはコールバックを使用する必要があります。次に、and-conditionsを「ネスト」します。

if ($isTrue) {
    db_record_exists(id, function(result) {
        if (result)
            doesExist();
        else
            doesntExist();
    });
else
   doesntExist();

便宜上、これらすべてをヘルパー関数でラップすることができます(複数回必要な場合は、ライブラリーに入れます)。

(function and(cond, async, suc, err) {
    if (cond)
        async(function(r) { (r ? suc : err)(); });
    else
        err();
})($isTrue, db_record_exists.bind(null, id), function() {
    …
}, function() {
    …
});
于 2013-03-14T20:24:00.053 に答える
-4

もしかしてこの先?

function db_record_exists(id, callback) {
  db.do( "SELECT 1", function(result) { callback(result ? true : false); });
}
于 2013-03-14T20:12:35.567 に答える