没有进程的JavaScript异步非阻塞函数

时间:2012-11-28 02:54:55

标签: javascript node.js

我在stackoverflow上读到了一些关于这个主题的问题,但它们似乎都没有回答我的怀疑。

我知道如何使用process.nextTick创建异步函数:

var async_function = function(val, callback){
    process.nextTick(function(){
        callback(val);
    });
};

我也读过Promise,但是如何在不使用process,Promise等库的情况下编写异步非阻塞函数?

原生方式是什么?我首先想到了这种方法:

var async = function(val, cb) {
    cb(val);    
}

然而,该功能阻止:

async(3, function(val) {
    console.log(val);
});
console.log(4);
// returns:
3
4

那么正确的实施是什么?如何在不依赖这些库的情况下编写异步函数?

3 个答案:

答案 0 :(得分:1)

您可以使用setTimeout - 它的本机功能就像延迟一样。

答案 1 :(得分:0)

将函数的工作分解为块,并使用process.nextTick在当前块完成后对下一个块进行排队。这样你就允许在每个工作块之间执行其他排队的回调。当所有块都完成后,调用作为参数传递给函数的回调。

以上假设您的函数没有调用现有的异步API,这自然会使您的函数异步而不做任何特殊的事情。

答案 2 :(得分:0)

在Node.js上,您需要使用process.nextTick。在浏览器中,您可以使用效率高于postMessage的{​​{1}}黑客。

以下是setTimeout(function(){},0) hack:https://github.com/timoxley/next-tick/blob/master/index.js

的跨浏览器实现