我在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
那么正确的实施是什么?如何在不依赖这些库的情况下编写异步函数?
答案 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