网上看到的也都是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循环之后执行的: (
去了解一下promise/A+规范 http://www.zhihu.com/question/25413141/answer/30767780
- async
- bluebird
- Q
@i5ting 恩,了解了,只有async我用过。不过我想知道的是用如何才能自己写异步呢?async肯定也是用js的原生代码写的嘛,我想知道原生代码如何实现:(
我想实现的要求很简单哎,就是上面的例子,console.log(“这里开始执行f2”);这个代码的执行时间不受到上面的调用for循环函数的影响,可是我实现不了:(
等到现在了:( 我觉得这个应该很多朋友都会吧?求指导呢,,,
循环已经阻塞了进程,除非另外开 async是依赖底层的东西实现的异步
@immatt2015 嘿,你是说我需要开一个子进程吗?
我找到办法了,可以这样做:
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代码的运行模型是单线程的