Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在NodeJS中编写非阻塞if语句?_Javascript_Node.js_Blocking_Nonblocking - Fatal编程技术网

Javascript 如何在NodeJS中编写非阻塞if语句?

Javascript 如何在NodeJS中编写非阻塞if语句?,javascript,node.js,blocking,nonblocking,Javascript,Node.js,Blocking,Nonblocking,我在php中有一个if语句: if ( $isTrue && db_record_exists($id)) { ... } else { ... }; 第一个条件是真/假布尔检查 第二个条件调用函数,查看数据库表中是否存在行,并返回true或false 我想在节点JS中重写这个条件,这样它就不会阻塞 我已经重写了db_记录_存在如下 function db_record_exists(id, callback) { db.do( "SELECT 1", function(

我在php中有一个if语句:

if ( $isTrue && db_record_exists($id)) { ... } 
else { ... };
第一个条件是真/假布尔检查

第二个条件调用函数,查看数据库表中是否存在行,并返回true或false

我想在节点JS中重写这个条件,这样它就不会阻塞

我已经重写了db_记录_存在如下

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)) {
...
}
写这个的“节点”方式是什么

任何建议都将不胜感激

(提前)谢谢你的帮助。

也许这样吧

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

首先检查变量,然后检查回调中异步调用的结果

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

function nope() {
    // does not exist
}

您将需要对if和else部分使用回调。然后“嵌套”和条件:

if ($isTrue) {
    db_record_exists(id, function(result) {
        if (result)
            doesExist();
        else
            doesntExist();
    });
else
   doesntExist();
为了方便起见,您可以将所有这些都封装在一个helper函数中(如果您多次需要它,可以将其放入一个库中):


您可能需要尝试更改编写该部分的方式。DB查询是异步的,您要做的是同步。
(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() {
    …
});