Nodejs中看这种同步方式处理怎么样,check中写定义判断条件逻辑,next中写下一步执行的操作

Nodejs中看这种同步方式处理怎么样,check中写定义判断条件逻辑,next中写下一步执行的操作

function wait(check,next,para){

var result=check.call(null,para);
if(result.finished){
 
   next.call();        
    
}else {
    console.log('continue checking ...');
    
setTimeout( function(){
    wait(check,next,result);
},100)
    
}

}

function next(){

console.log("next action");

}

function check(para){ var index=para.index; index++;

if(index ==10){
  para.finished=true;
}
para.index=index;
return para;

} var para={finished:false,index:1};

wait(check,next,para);


3 回复

在Node.js中,使用递归的异步函数来实现同步式的逻辑处理是一种常见的方法。这种方法可以让你以一种更直观的方式处理复杂的逻辑流程。下面是一个示例代码,展示了如何通过wait函数实现这一目标,其中check函数用于定义判断条件逻辑,而next函数则用于表示下一步的操作。

示例代码

function wait(check, next, para) {
    // 执行检查函数,并获取结果
    var result = check.call(null, para);

    // 如果检查函数返回的对象中包含 `finished` 属性且为真,则执行下一步操作
    if (result.finished) {
        next.call();
    } else {
        console.log('继续检查...');

        // 否则,等待一段时间后再次调用 wait 函数
        setTimeout(function () {
            wait(check, next, result);
        }, 100);
    }
}

// 定义下一步操作
function next() {
    console.log("下一步操作");
}

// 定义检查逻辑
function check(para) {
    var index = para.index;
    index++;

    // 当索引达到10时,标记完成
    if (index === 10) {
        para.finished = true;
    }

    // 更新索引值
    para.index = index;
    return para;
}

// 初始化参数对象
var para = { finished: false, index: 1 };

// 调用 wait 函数开始检查过程
wait(check, next, para);

解释

  1. wait函数:这是一个递归函数,它接收三个参数:一个检查函数check、一个下一步操作函数next以及一个参数对象para。函数首先调用check函数,根据返回的结果决定是否执行next函数或继续等待。

  2. next函数:这是定义的下一步操作。在这个例子中,它简单地打印出“下一步操作”。

  3. check函数:该函数负责定义具体的检查逻辑。在这个例子中,它增加了一个索引值,并在索引达到10时设置finished属性为true

  4. para对象:这是传递给check函数的参数对象,用于存储当前的状态信息(如索引值)以及是否已完成的标志。

这种方法使得你可以更容易地理解和维护复杂的异步逻辑流程,因为它将每个步骤的逻辑清晰地分离出来。


比如象一般的ajax请求可以这样写

比如ajax可以这样写 

var para = { finished: false, data: ‘’ }; $.get(“server.php”, function(x) { para.finished = true; para.data = x; });

wait(function() { return (para.finished) ? true : false; }, function() { $("#log").html(para.data) }, para);

这样写比原来那种一坨一坨的写法至少从代码思路上要顺一些 不过就是这个传递参数的para没办法封装起来,还是要暴露在外面

这段代码展示了一种简单的同步等待机制。通过递归调用 wait 函数,在每次调用时检查条件是否满足,如果条件不满足则延时后再进行下一次检查。

以下是代码的详细解释:

代码结构

  • wait 函数:这是主函数,用于等待某个条件满足。

    • 参数 check 是一个函数,用于检查某个条件是否满足。
    • 参数 next 是一个函数,当条件满足时需要执行的动作。
    • 参数 para 是一个对象,包含状态信息(例如当前索引)。
  • check 函数:这是用于检查条件的函数。

    • 它会修改 para 对象中的某些属性,并返回 para 对象。
    • 如果条件满足,则设置 para.finishedtrue
  • next 函数:这是当条件满足时需要执行的动作。

    • 当前它只是简单地打印 “next action”。
  • wait 函数的核心逻辑

    • 调用 check 函数来检查条件是否满足。
    • 如果条件满足(即 result.finishedtrue),则调用 next 函数。
    • 如果条件不满足,则打印 “continue checking …” 并递归调用 wait 函数,设置一个定时器延迟100毫秒后继续检查。

示例代码解释

function wait(check, next, para) {
    var result = check.call(null, para);
    if (result.finished) {
        next.call();
    } else {
        console.log('continue checking ...');
        setTimeout(function () {
            wait(check, next, result);
        }, 100);
    }
}

function next() {
    console.log("next action");
}

function check(para) {
    var index = para.index;
    index++;
    if (index === 10) {
        para.finished = true;
    }
    para.index = index;
    return para;
}

var para = { finished: false, index: 1 };
wait(check, next, para);

总结

这种同步等待机制是一种常见的模式,用于处理需要定期检查某个条件的情况。在这个例子中,我们每100毫秒检查一次条件,直到条件满足。你可以根据实际需求调整检查频率和具体逻辑。

回到顶部