我在php中有一个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语句中,并使用布尔检查。例如,以下陈述没有意义:
if (isTrue and db_record_exists(id, callback)) {
...
}
写这个的“节点”方式是什么?
非常感谢任何建议。
先谢谢你的帮助。
答案 0 :(得分:6)
首先检查变量,然后检查回调中异步调用的结果。
if (isTrue) db_record_exists(id, function(r) {
if (r) {
// does exist
} else nope();
});
else nope();
function nope() {
// does not exist
}
答案 1 :(得分: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() {
…
});
答案 2 :(得分:-4)
也许这样?
function db_record_exists(id, callback) {
db.do( "SELECT 1", function(result) { callback(result ? true : false); });
}