Javascript java脚本setTimeout和递归函数执行流

Javascript java脚本setTimeout和递归函数执行流,javascript,settimeout,Javascript,Settimeout,我有一个javascript函数,如下所示。我想在setTimeout方法处暂停执行。据我所知,setTimeout方法没有按预期工作,执行过程超出了setTimeout方法,并且console.log(“wait”)在100秒后被调用。但这不是我所期望的,我想睡100秒。我应该如何实现这一点,也可能是因为递归调用console.log(“wait”)只被调用一次,而不是所有递归调用。为什么? function matrixSearch(array,row1,row2,col1,col2,val

我有一个javascript函数,如下所示。我想在setTimeout方法处暂停执行。据我所知,setTimeout方法没有按预期工作,执行过程超出了setTimeout方法,并且console.log(“wait”)在100秒后被调用。但这不是我所期望的,我想睡100秒。我应该如何实现这一点,也可能是因为递归调用console.log(“wait”)只被调用一次,而不是所有递归调用。为什么?

function matrixSearch(array,row1,row2,col1,col2,value)
    {
        console.log(array[row1][col1]);
        console.log(array[row2][col2]);
        if(value<array[row1][col1] || value > array[row2][col2])
            return false;
        if(value==array[row1][col1] || value == array[row2][col2])
            return true;
         var cRow1=row1,cCol1=col1,cRow2=row2,cCol2=col2;
         var midRow = Math.floor((row1+row2)/2);
         var midCol = Math.floor((col1+col2)/2);
         setTimeout(function() {
             console.log("wait");
         },100);
         while((row1!=midRow || col1!=midCol) && (row2!=midRow || col2!=midCol))
         {
            if(array[midRow][midCol]==value)
            {
                return true;
            }
            if (array[midRow][midCol]<value)
            {
                row2=midRow;
                col2=midCol;
            }
            else
            {
                row1=midRow;
                col1=midCol;
            }
            midRow = Math.floor((row1+row2)/2);
            midCol = Math.floor((col1+col2)/2);
         }
         var found = matrixSearch(array,midRow+1,cCol1,cRow2,midCol,value);
         if(!found)
             found=matrixSearch(array,cRow1,midCol+1,midRow,cCol2,value);
         return found;
    }
函数矩阵搜索(数组,行1,行2,列1,列2,值)
{
log(数组[row1][col1]);
log(数组[row2][col2]);
if(值数组[row2][col2])
返回false;
if(value==array[row1][col1]| | value==array[row2][col2])
返回true;
变量cRow1=row1,cCol1=col1,cRow2=row2,cCol2=col2;
var midRow=数学楼层((第1行+第2行)/2行);
var midCol=数学层((col1+col2)/2);
setTimeout(函数(){
控制台日志(“等待”);
},100);
而((行1!=中行| |列1!=中行)和&(行2!=中行| |列2!=中行))
{
if(数组[中间行][中间列]==值)
{
返回true;
}

如果(array[midRow][midCol]setTimeout被传递一个回调函数,该函数在给定的时间之后执行。随后的代码将在setTimeout行之后立即执行,而不是在指定的超时之后


如果希望代码块在时间段后执行,则需要将其放入回调函数中。

setTimeout被传递一个回调函数,该函数在给定时间后执行。随后的代码将在setTimeout行之后立即执行,而不是在指定的超时之后


如果希望代码块在时间段之后执行,则需要将其放入回调函数。

setTimeout不是用于阻止函数执行,而是用于延迟传递给setTimeout函数的回调函数的执行,要延迟函数的其余部分,则必须将其放在console.log当前所在的位置。

setTimeout不是用于阻止函数执行,而是用于延迟传递给setTimeout函数的回调函数的执行,要延迟函数的其余部分,您必须立即将其放置在console.log所在的位置

您需要将代码放置在设置的等待时间内,但这有点棘手,因为返回将不起作用

我还没有测试过这段代码,所以它可能不会工作,但这是你需要采取的方向

函数矩阵搜索(数组,行1,行2,列1,列2,值)
{
返回新承诺(重新爱,拒绝){
setTimeout(函数(){
log(数组[row1][col1]);
log(数组[row2][col2]);
if(值数组[row2][col2])
返回解析(false);
if(value==array[row1][col1]| | value==array[row2][col2])
返回resolve(true);
变量cRow1=row1,cCol1=col1,cRow2=row2,cCol2=col2;
var midRow=数学楼层((第1行+第2行)/2行);
var midCol=数学层((col1+col2)/2);
而((行1!=中行| |列1!=中行)和&(行2!=中行| |列2!=中行))
{
if(数组[中间行][中间列]==值)
{
返回resolve(true);
}

如果(array[midRow][midCol]您需要将代码置于设置的等待时间内,但这有点棘手,因为您的返回将不起作用

我还没有测试过这段代码,所以它可能不会工作,但这是你需要采取的方向

函数矩阵搜索(数组,行1,行2,列1,列2,值)
{
返回新承诺(重新爱,拒绝){
setTimeout(函数(){
log(数组[row1][col1]);
log(数组[row2][col2]);
if(值数组[row2][col2])
返回解析(false);
if(value==array[row1][col1]| | value==array[row2][col2])
返回resolve(true);
变量cRow1=row1,cCol1=col1,cRow2=row2,cCol2=col2;
var midRow=数学楼层((第1行+第2行)/2行);
var midCol=数学层((col1+col2)/2);
而((行1!=中行| |列1!=中行)和&(行2!=中行| |列2!=中行))
{
if(数组[中间行][中间列]==值)
{
返回resolve(true);
}

如果(array[midRow][midCol]首先,
setTimeout
使用毫秒,那么对于100秒的睡眠,您需要使用
100000
而不是
100

其次,
setTimeout
是异步的,这意味着回调函数被安排在设置的时间过后执行,但同时其他代码仍在执行

要执行所需操作,您需要一个虚拟变量和一个测试该变量状态的
while循环
条件:

proceed=false;
setTimeout('proceed=true;',100000);
while (!proceed) {}
// rest of code

while循环将保留代码,直到执行
setTimeout
procedure=true;
代码。

首先,
setTimeout
使用毫秒,因此对于100秒睡眠,您需要使用
100000
而不是
100

其次,
setTimeout
是异步的,这意味着回调函数被安排在设置的时间过后执行,但同时其他代码仍在执行

要执行所需操作,您需要一个虚拟变量和一个测试该变量状态的
while循环
条件:

proceed=false;
setTimeout('proceed=true;',100000);
while (!proceed) {}
// rest of code

while循环将保留代码,直到执行
setTimeout
procedure=true;
代码。

但是我应该如何实现类似睡眠的功能。Javascript的行为与Java/C稍有不同。超时基本上将传递的函数放入事件循环中,该事件循环会一次又一次地传递,直到指定的时间