在尝试多个办法与在网上找了很多文章看,没有找到解决办法,只能用很蠢的层层叠加的办法了。
我在做的在for循环,里面先通过findOne(callback)查找数据库作出判断赋值给变量t,在用findOneandUpdate(callback)函数和变量t的值对数据库进行操作,但是这两个函数都包含callback函数,变量t以及各种操作几乎都在callback函数里面,他们的执行顺序并不会按照我们书写的顺序进行。
最后我的很蠢办法是
for(var i=0;i<l;i++)
{
(function(i){//不要忘记这里的i
$m.findOne(function(){
//各种操作
t=1;
if(t==1)
$m.fineOneandUpdate(function(){
//操作1
});
else{
$m.fineOneandUpdate(function(){
//操作2
});
}
});
})(i);//不要忘记这里的i
}
代码量太大了,可是我找不到解决办法,先过了这一关吧,以后有想法再优化代码。
(目前我是涉及到2个函数的操作,函数越多,这个层次越多就越容易乱。)
for循环与异步函数与回调函数:里面的异步函数要用匿名函数包装(回调函数才会在每一次循环中执行),多个异步函数之间如果有关系要尽可能嵌套。如果还是没有控制好就用**if…else…**限制。
20210506
学习之后重新回来说明一下对async、await的使用,把语句包装成函数更加简洁,而且可以实现更复杂的异步。(再配合上返回flag来实现会比较容易,看个人需求啦)
getResult();
async function getResult()
{
await a();
await b();
}
function a(){放异步函数}
function b(){放异步函数}