在NodeJS中异步使用同步过程

时间:2017-07-20 07:02:02

标签: node.js multithreading asynchronous event-loop libuv

我最近在 NodeJS 的引擎下挖掘,需要澄清其队列事件循环

NodeJS是单线程的,所以如果我有一个函数:findTheMeaningOfLife()这是同步函数并将按原样调用它,它可能需要一段时间才能得到42

但如果我将这个函数包装在Promise中,它将如何表现呢?例如:

function findTheMeaningOfLifeAsync(){
    return new Promise(function(resolve, reject){
        try {
            var meaningOfLife = findTheMeaningOfLife();
            resolve(meaningOfLife);
        } catch (error) {
            reject(error);
        }

    })
}

并将调用它,它将被放置在NodeJS(libuv)队列中并在另一个线程中调用吗?如果没有,我怎么能让它真正异步?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

首先,让我澄清一下:Node Js不是单线程,它有一个执行线程几个服务线程(后者用于我/ O操作)。

话虽如此,您提出的代码的典型行为如下:

  1. 您使用String date = dayOfMonth + "/" + month + "/" + year + " ?"; 处理程序从外部呼叫findTheMeaningOfLifeAsync()
  2. 被调用的函数立即返回一个promise,调用函数等待该promise的解析并继续执行。
  3. 当调用者函数正在等待时,其他事件继续在执行线程中处理,因此整个事件循环不会停止。
  4. 一旦被调用的函数执行完毕,它就会将promise promise返回给调用函数。
  5. 调用函数现在将使用promise promise的结果恢复执行。
  6. 因此,关于你的主要问题,使用promises将以某种方式监视当前状态并等待解决,然后从保存点恢复。但是,这不涉及使用多线程(因为在这种情况下,I / O操作不包括在内,我假设),而是事件用于提供异步编程。我建议您查看Node Js事件以更深入地了解。我在这里为您提供了一个有用的链接: NodeJs Events