3实现在Node.js同步操作
需要执行的函数:
复制代码代码如下所示:
VaR func1 =功能(REQ,RES,回调){
setTimeout(){()函数(
(console.log func1);
回调(REQ,RES,1);
},13000);
}
VaR func2 =功能(REQ,RES,回调){
setTimeout(){()函数(
console.log(还是一样的);
回调(REQ,RES,2);
},5000);
}
无功func3 =功能(REQ,RES,回调){
setTimeout(){()函数(
console.log(func3);
回调(REQ,RES,3);
},1000);
}
可以看出,setTimeout函数用于在func1,func2和func3,和执行的时间是13秒,5秒和1秒分别。由于对Nodejs的异步特性,如果使用的是普通的函数调用的方法:
复制代码代码如下所示:
无功需求= null;
var = null;
Var(回调函数){ };
func1(REQ,RES,回调);
func2(REQ,RES,回调);
func3(REQ,RES,回调);
Output content:
复制代码代码如下所示:
在func3
在func2
在func1
原因是NodeJS是异步的,而不等待func1 func2执行后执行,而是立即执行(所以是func3)。因为func3具有最短的运行时间,这是第一次,还是一样的时间,func1上。但这显然不是我们想要的结果。我要什么怎么办呢
解决方案之一:回调
复制代码代码如下所示:
深嵌套
无功需求= null;
var = null;
func1(REQ,RES,函数()){
func2(REQ,RES,函数()){
func3(REQ,RES,函数()){
(0)process.exit;
})
});
});
这种方法虽然能很快解决,但也存在明显的问题。一是代码维护。二是代码的深层嵌套看起来很不舒服,这种方法是不可取的。
解决方案二:递归调用
复制代码代码如下所示:
功能executefunc(funcs,计数,求和,请求,RES){
如果(计数=总和){
返回;
}
别的{
funcs {数量}(需求、要求、功能()){
计数+;
executefunc(funcs,计数,求和,请求,RES);
});
}
}
同步调用
无功需求= null;
var = null;
无功funcs = { func1,func2,func3 };
VaR len = funcs.length;
ExecuteFunc (FuncS, 0, len, req, RES);
许多函数首先由一个数组组成,递归函数的特性可以用来使程序按一定的顺序执行。
解决方案三:调用类库
随着Nodejs的发展,对此有越来越多的类库。步和异步是好的。
1步的呼叫相对来说比较清爽。
复制代码代码如下所示:
(步骤
功能thefunc1(){
func1(本);
},
功能thefunc2(finishflag){
console.log(finishflag);
还是一样的(这个);
},
功能thefunc3(finishflag){
console.log(finishflag);
}
);
2.async的系列方法,例如,其调用方法:
复制代码代码如下所示:
无功需求= null;
var = null;
Var(回调函数){ };
async.series(
{
函数(回调){
func1(REQ,RES,回调);
},
函数(回调){
func2(REQ,RES,回调);
},
函数(回调){
func3(REQ,RES,回调);
}
}
);