转自 https://blog.csdn.net/gaoxuaiguoyi/article/details/47659343
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gaoxuaiguoyi/article/details/47659343 </div>
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-cd6c485e8b.css">
<div class="htmledit_views" id="content_views">
首先安装 模块async
测试代码:
call.js
exports.fun1 = function (callback) {
setTimeout(function(){
console.log('方法1');
callback('1');
},1900);
}
exports.fun2 = function (callback) {
setTimeout(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'方法2'</span>);
callback(<span class="hljs-string">'2'</span>);
},<span class="hljs-number">1700</span>);
}
exports.fun3 = function (callback) {
setTimeout(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'方法3'</span>);
callback(<span class="hljs-string">'3'</span>);
},1500);
}
test.js:
var async = require('async');
var step = require('step');
var call = require('./call');
call.fun1(function(data){
<span class="hljs-built_in">console</span>.log(data);
});
call.fun2(function(data){
<span class="hljs-built_in">console</span>.log(data);
});
call.fun3(function(data){
<span class="hljs-built_in">console</span>.log(data);
});
console.log(‘正常执行的方法’);
没有使用异步之前,我们调用三个方法期望的结果是:输出:方法1,方法2,方法3,但是node本身异步的机制决定了它不能像其他同步语言一样正常输出,结果输出是以时间花费最少的先执行:结果
这就是node的异步机制,我们使用async同步模块进行再次测试
加入代码:
function seriesFunc() {
<span class="hljs-keyword">async</span>.series([
<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">callback</span>) </span>{
call.fun1(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
callback(<span class="hljs-literal">null</span>,data);
});
},
<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">callback</span>) </span>{
call.fun2(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
callback(<span class="hljs-literal">null</span>,data);
});
},
<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">callback</span>) </span>{
call.fun3(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">data</span>)</span>{
callback(<span class="hljs-literal">null</span>,data);
});
}],
<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">error,result</span>) </span>{
<span class="hljs-keyword">if</span>(error) {
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"error: "</span>,error,<span class="hljs-string">"msg: "</span>,result);
}
<span class="hljs-keyword">else</span> {
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"方法执行完毕"</span>+result);
}
}
);
}
seriesFunc();运行结果是否是我们期望的一次执行呢?
结果果然是我们期待的一样,顺序进行执行,node异步的机制就决定了,响应速度快,做web开发的优势。