Javascript 阻塞nodejs中的IO

Javascript 阻塞nodejs中的IO,javascript,node.js,blocking,nonblocking,Javascript,Node.js,Blocking,Nonblocking,我正在使用NodeJS开发一个应用程序,其中两个查询相互依赖。下面是我的情况说明 我必须查询数据库中的一些值,比如A,然后我必须查询 仅当数据库中有A时,才为其他值B创建数据库 我知道我可以用NodeJS的自然方式来做这件事,比如当A的结果准备好时执行A的查询在A的回调中执行B的查询,然后最终在B的回调中呈现响应 这是我的问题,我刚才提到的解决方案中是否存在设计问题,可能是关于嵌套回调的 第二,是否有任何方法可以使NodeJs IO从非阻塞变为阻塞 这是我的问题,我刚才提到的解决方案中是否存在设

我正在使用NodeJS开发一个应用程序,其中两个查询相互依赖。下面是我的情况说明

我必须查询数据库中的一些值,比如A,然后我必须查询 仅当数据库中有A时,才为其他值B创建数据库

我知道我可以用NodeJS的自然方式来做这件事,比如当A的结果准备好时执行A的查询在A的回调中执行B的查询,然后最终在B的回调中呈现响应

这是我的问题,我刚才提到的解决方案中是否存在设计问题,可能是关于嵌套回调的

第二,是否有任何方法可以使NodeJs IO从非阻塞变为阻塞

这是我的问题,我刚才提到的解决方案中是否存在设计问题,可能是关于嵌套回调的

不,你的解决方案很好

第二,是否有任何方法可以使NodeJs IO从非阻塞变为阻塞

对。您可以编写自己的C++扩展来提供阻塞调用。 这是我的问题,我刚才提到的解决方案中是否存在设计问题,可能是关于嵌套回调的

不,你的解决方案很好

第二,是否有任何方法可以使NodeJs IO从非阻塞变为阻塞

对。您可以编写自己的C++扩展来提供阻塞调用。 这是我的问题,我刚才提到的解决方案中是否存在设计问题,可能是关于嵌套回调的

不,你的解决方案很好

第二,是否有任何方法可以使NodeJs IO从非阻塞变为阻塞

对。您可以编写自己的C++扩展来提供阻塞调用。 这是我的问题,我刚才提到的解决方案中是否存在设计问题,可能是关于嵌套回调的

不,你的解决方案很好

第二,是否有任何方法可以使NodeJs IO从非阻塞变为阻塞


对。您可以编写自己的C++扩展来提供阻塞调用。

< P>我意识到一个库,它是我启动NoDJS项目时希望找到的库。它可以解决这个问题,甚至更多

Async提供了大约20个函数,其中包括常用的“函数” 嫌疑犯(映射、减少、过滤、每个…)以及一些常见模式 对于异步控制流(并行、串行、瀑布…)。全部的 这些函数假定您遵循node.js提供 一个回调函数作为异步函数的最后一个参数

网站上的基本示例将对您的场景有所帮助

async.series([
    function(callback){
        // do db call one
        callback(null, 'one');
    },
    function(callback){
        // do db call two
        callback(null, 'two');
    }
],
function(err, results){
    // results is now equal to ['one', 'two']
}); 

当我开始我的NodeJs项目时,我发现了一个名为Which id的库。它可以解决这个问题,甚至更多

Async提供了大约20个函数,其中包括常用的“函数” 嫌疑犯(映射、减少、过滤、每个…)以及一些常见模式 对于异步控制流(并行、串行、瀑布…)。全部的 这些函数假定您遵循node.js提供 一个回调函数作为异步函数的最后一个参数

网站上的基本示例将对您的场景有所帮助

async.series([
    function(callback){
        // do db call one
        callback(null, 'one');
    },
    function(callback){
        // do db call two
        callback(null, 'two');
    }
],
function(err, results){
    // results is now equal to ['one', 'two']
}); 

当我开始我的NodeJs项目时,我发现了一个名为Which id的库。它可以解决这个问题,甚至更多

Async提供了大约20个函数,其中包括常用的“函数” 嫌疑犯(映射、减少、过滤、每个…)以及一些常见模式 对于异步控制流(并行、串行、瀑布…)。全部的 这些函数假定您遵循node.js提供 一个回调函数作为异步函数的最后一个参数

网站上的基本示例将对您的场景有所帮助

async.series([
    function(callback){
        // do db call one
        callback(null, 'one');
    },
    function(callback){
        // do db call two
        callback(null, 'two');
    }
],
function(err, results){
    // results is now equal to ['one', 'two']
}); 

当我开始我的NodeJs项目时,我发现了一个名为Which id的库。它可以解决这个问题,甚至更多

Async提供了大约20个函数,其中包括常用的“函数” 嫌疑犯(映射、减少、过滤、每个…)以及一些常见模式 对于异步控制流(并行、串行、瀑布…)。全部的 这些函数假定您遵循node.js提供 一个回调函数作为异步函数的最后一个参数

网站上的基本示例将对您的场景有所帮助

async.series([
    function(callback){
        // do db call one
        callback(null, 'one');
    },
    function(callback){
        // do db call two
        callback(null, 'two');
    }
],
function(err, results){
    // results is now equal to ['one', 'two']
}); 

如果您阻止IO,在这些查询完成之前,您的整个程序将根本无法响应任何请求。这通常不是您想要的。Node确实有一些I/O函数,它们同时提供阻塞版本和非阻塞版本,例如fs.readFile和fs.readFileSync。如果您的数据库驱动程序提供了阻塞功能,您可以使用它。当节点应用程序启动时可能需要阻塞的一个例子是,因为在初始化功能完成之前,您不会接受任何请求。如果您阻止IO,则在这些查询完成之前,您的整个程序将无法响应任何请求。这通常不是您想要的。Node确实有一些I/O函数,它们同时提供阻塞版本和非阻塞版本,例如fs.readFile和fs.readFileSync。如果您的数据库驱动程序提供了阻塞功能,您可以使用它。当节点应用程序启动时可能需要阻塞的一个例子是,因为在初始化功能完成之前,您不会接受任何请求。如果您阻止IO,则在这些查询完成之前,您的整个程序将无法响应任何请求。这通常不是您想要的。Node确实有一些I/O函数,它们同时提供阻塞版本和非阻塞版本,例如fs.readFile和fs.readFileSync。如果您的数据库驱动程序提供了阻塞功能,您可以使用它。当节点应用程序启动时,可能需要阻塞的一个例子是,因为在初始化功能完成之前,您不会接受任何请求。如果您阻塞IO,则在这些查询完成之前,您的整个程序将无法响应任何请求