Nodejs异步实现
发布于 10 年前 作者 yangfanacc 5618 次浏览 最后一次编辑是 8 年前 来自 问答

网上看到的也都是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 回复

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

  • async
  • bluebird
  • Q

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

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

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

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

@immatt2015 嘿,你是说我需要开一个子进程吗?

@immatt2015

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

这个要怎么理解

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

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

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

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

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

方法多呢 还有 setImmediate 使用 event emitter

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

回到顶部