首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无进程的JavaScript异步非阻塞函数

无进程的JavaScript异步非阻塞函数
EN

Stack Overflow用户
提问于 2012-11-28 10:54:55
回答 3查看 157关注 0票数 0

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

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

代码语言:javascript
复制
var async_function = function(val, callback){
    process.nextTick(function(){
        callback(val);
    });
};

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

原生方法是什么?我首先想到的是这个方法:

代码语言:javascript
复制
var async = function(val, cb) {
    cb(val);    
}

然而,该函数块:

代码语言:javascript
复制
async(3, function(val) {
    console.log(val);
});
console.log(4);
// returns:
3
4

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-28 13:58:05

在Node.js上,您需要使用process.nextTick。在浏览器中,你可以使用比setTimeout(function(){},0)高效得多的postMessage hack。

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

票数 0
EN

Stack Overflow用户

发布于 2012-11-28 10:59:23

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

票数 1
EN

Stack Overflow用户

发布于 2012-11-28 11:35:48

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13597012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档