2

我在 php 中有一个 if 语句:

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

第一个条件是真/假布尔检查。

第二个条件调用一个函数来查看数据库表中是否存在行并返回真或假。

我想在 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 部分使用回调。然后“嵌套”和条件:

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 回答