0

我在 stackoverflow 上阅读了一些关于这个主题的问题,但似乎没有一个能回答我的疑问。

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

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

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

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

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

但是,该功能块:

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

那么正确的实现方式是什么?如果不依赖这些库,我如何编写异步函数?

4

3 回答 3

1

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

于 2012-11-28T02:59:23.183 回答
0

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

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

于 2012-11-28T03:35:47.567 回答
0

在 Node.js 上,您需要使用process.nextTick. 在浏览器中,您可以使用postMessagesetTimeout(function(){},0).

postMessage这是hack的跨浏览器实现: https ://github.com/timoxley/next-tick/blob/master/index.js

于 2012-11-28T05:58:05.050 回答