2013-03-14 68 views
2

我在PHP的if語句:如何在Node JS中編寫非阻塞if語句?

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

第一個條件是真/假布爾檢查。

第二個條件調用函數來查看數據庫表中是否存在行並返回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 (isTrue and db_record_exists(id, callback)) { 
... 
} 

什麼是「節點」的方式來寫這個?

任何意見將不勝感激。

(提前)感謝您的幫助。

+0

你可能需要嘗試改變你寫這部分的方式。數據庫查詢是異步的,你試圖做的是同步。 – eburgos 2013-03-14 20:14:00

回答

6

首先檢查變量,然後檢查回調中的異步調用結果。

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

function nope() { 
    // does not exist 
} 
-4

也許這樣?

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

您需要爲if和else部分使用回調。那麼,「鳥巢」和條件:

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() { 
    … 
});