CNode

Nodejs异步实现

问答
Yyangfanacc发布于11 年前最后回复11 年前11 回复6247 浏览0 收藏

网上看到的也都是fs的异步读取等,刷了好久的网页也没有找到自己想要的。 比如我,我这边两个函数,f1(xxxx)和f2(xxxx)。f1函数需要一段时间才能够执行完毕,我如何写代码,才能够让f1去开始执行的时候就去执行f2,f2不被f1阻塞呢?不明白! 我以为这样写就可以了

yibu(100000, function(originData) {
    console.log("f1执行的结果...." + originData);
});

console.log("这里开始执行f2");

function yibu(num, callback) {
    for(var i = 0; i < num; i++) {
        console.log(i);
    }
    callback("OK");
}

可是不行,,, “console.log("这里开始执行f2");“代码是在for循环之后执行的: (

查看回复

回复 (11)

Y
yangfanacc#1·11 年前

等到现在了:( 我觉得这个应该很多朋友都会吧?求指导呢,,,

I
i5ting#2·11 年前

去了解一下promise/A+规范 http://www.zhihu.com/question/25413141/answer/30767780

  • async
  • bluebird
  • Q
Y
yangfanacc#3·11 年前
引用 i5ting去了解一下promise/A+规范 http://www.zhihu.com/question/25413141/answer/30767780 async bluebird Q

@i5ting 恩,了解了,只有async我用过。不过我想知道的是用如何才能自己写异步呢?async肯定也是用js的原生代码写的嘛,我想知道原生代码如何实现:(

Y
yangfanacc#4·11 年前

我想实现的要求很简单哎,就是上面的例子,console.log("这里开始执行f2");这个代码的执行时间不受到上面的调用for循环函数的影响,可是我实现不了:(

I
immatt2015#5·11 年前

循环已经阻塞了进程,除非另外开 async是依赖底层的东西实现的异步

D
dayuoba#7·11 年前
引用 immatt2015循环已经阻塞了进程,除非另外开 async是依赖底层的东西实现的异步

@immatt2015

async是依赖底层的东西实现的异步

这个要怎么理解

据我看到的async源码来说,async都是js层面的一些迭代器封装。

Y
yangfanacc#8·11 年前

我找到办法了,可以这样做:

setTimeout(function() {
    for(var i = 0; i < num; i++) {
      console.log(i);
    }
    callback("OK");
}, 0);

@immatt2015说的对,for循环阻塞主线程了,可以用setTimeout来异步执行

Y
yangfanacc#9·11 年前

更好的办法是使用process.nextTick()来使用异步的回调。

R
russj#10·11 年前

方法多呢 还有 setImmediate 使用 event emitter

D
DavidCai1993#11·11 年前

for阻塞,毕竟用户的JS代码的运行模型是单线程的

参与回复
登录后即可参与回复。登录