2013-04-05 44 views
0

我正在研究一个预处理较少,手写笔等的库。预处理器可以是异步的,也可以是同步的。由于结果仅用于构建阶段,因此在此处编写阻止代码不是问题。是否有可能在node.js的同步函数中处理异步和同步函数结果?

因为大多数预处理器都是同步的,并且库期望同步函数在链中,所以我想知道是否可以将预处理器函数包装在同步函数中,以便同时处理来自预处理函数的同步和异步结果?

基本上可以这样做,不知何故?

syncFn = function(contents) { 
    var res = syncOrAsyncFn(contents, function(err, contents) { 
    res = contents 
    }) 
    // .. do some magic here that waits for the results of syncOrAsyncFn 
    return res; // Return the result from a function that could be async or sync 
} 

回答

0

对不起,这是不可能的。无论何时运行代码块,都不会运行,即NodeJS中没有真正的并行性。因此无论你做什么:res = contents行只能在syncFn完成任何操作后才会触发,即在所有同步操作在一个代码块中完成作业之后。

这迫使程序员的NodeJS使用回调格局,例如:

syncFn = function(contents, callback) { 
    syncOrAsyncFn(contents, function(err, contents) { 
    callback(contents); 
    }) 
} 
+0

可悲的,但它是真实的。 – ragulka 2013-04-08 14:34:36