'when'和'setTimeout'函数无法正常工作

时间:2019-11-14 16:45:01

标签: javascript jquery html

我正试图通过延迟执行来即兴编写一段代码。

$(document).ready(
    function testFunc(){
        setTimeout(function(){console.log("something happening...")},1000) 
    }

    $.when(testFunc()).done(function(){
        //this code executes immediately, shouldn't it be executed after 1 sec or 1000 milliseconds
        $('#tWrapper').removeClass("d-none");
        $('#spinnerrr').remove();
    });
});

因此,我想在一个函数完成后做一些事情(以我为例,删除一些类或HTML元素)(这将是ajax调用,但是现在我在代码延迟的情况下即兴使用了AJAX调用),但是$ .when()函数内部的函数会立即执行。

2 个答案:

答案 0 :(得分:2)

testFunc必须是一个Promise或一个返回Promise的函数

            const testFunc = new Promise(resolve => {
                {
                    console.log("something waiting to happen...")
                    setTimeout(function () {
                        console.log("something happening...")
                        resolve();
                    }, 1000);
                }
            })
            $.when(testFunc).done(function () {
                console.log("something happened...")
            });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

答案 1 :(得分:0)

最好的方法是在超时结束时执行该函数,除非超时中的某些内容是异步的(那么那应该是您等待的时间!)。

function setData(data) {
  console.log("My article is called " + data.title);
  console.log("And this is what I wrote: " + data.content);
}

function loadData() {
  setTimeout(function () {
    console.log("Data loaded.");
    setData({ title: 'My first artile', content: '...' });
  }, 1000);
}