如何在javascript中延迟特定函数的执行?

如何在javascript中延迟特定函数的执行?,javascript,canvas,Javascript,Canvas,我正在研究一种网络架构,它对GET查询的响应很晚。我希望画的形象,一旦我能够从服务器接收。我正在尝试增加显示函数的延迟时间,以便在从服务器获取时可以绘制该函数。我正在使用画布显示来自特定URI的图片。下面是我需要延迟运行的代码部分: var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var img = new Image; var strDataURI = nameSt

我正在研究一种网络架构,它对GET查询的响应很晚。我希望画的形象,一旦我能够从服务器接收。我正在尝试增加显示函数的延迟时间,以便在从服务器获取时可以绘制该函数。我正在使用画布显示来自特定URI的图片。下面是我需要延迟运行的代码部分:

var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var img = new Image;
var strDataURI = nameStr;
img.onload = function(){
    context.drawImage(img,0,0, 150,150); // Or at whatever offset you like
};  
img.src = strDataURI;

请帮忙。提前感谢。

请尝试
setTimeout
(请参阅此处)

有几个选项可供选择。如果你坚持让它成为计时器,那么你可以使用

您还可以将ajax调用设置为同步而不是异步。这将导致其他函数在运行前等待,直到完成

$.ajax({
  async: false
});
最后,您可以将draw函数放在ajax调用的完成部分。此函数在ajax调用完成后运行

$.ajax({
  complete: function(result) {
    // code to perform the draw
  }
});
暗示 我的建议是一点也不要拖延。正如chockleyc所说,等待回应将是最好的选择

案例 有以下几种可能的情况:

  • 您正在发出GET请求并等待响应
  • 您不是手动发出请求,它只是用页面加载
  • 您可以手动发出GET请求 如果您自己进行GET查询,我强烈建议您这样使用
    Promise

    var getRequest = new Promise(function(resolve, reject){
        //We call resolve(...) when what we were doing async succeeded, and reject(...) when it failed.
        //In this example, we use setTimeout(...) to simulate async code. 
    
        var oReq = new XMLHttpRequest();
    
        oReq.onload = function(e) {
            resolve(oReq.response);
        }
        oReq.open("GET", "www.bananas.com");
        oReq.send();
    });
    
    然后你会像这样使用它:

    var getRequest()
        .then(console.log);
    
    在本例中,它将打印响应。如果您不熟悉,我建议您使用

    另一种选择是简单地使用JavaScript中的XMLHttp,而无需承诺。您也可以在中阅读更多的示例,或者如果它对您来说太混乱,请尝试使用

    您不需要手动发出GET请求 在这种情况下,我建议您侦听GET请求,然后在其响应到达后执行特定操作。在以下回复中可以找到一个很好的解决方案:

    您将在其中找到一个迷你库,它将侦听所有GET请求。这样,每次收到GET请求时,都可以根据需要对其进行过滤并执行代码

    如果前面的代码对您来说太复杂,您还可以看看这个简单得多的替代方案:

    你真的坚持要用计时器吗 目前为止最糟糕的解决方案。为什么?试着回答以下问题:

  • 如果图像没有在您预期的时间之前到达,会发生什么情况?不是1秒,而是2秒
  • 您如何确切地知道GET请求需要多长时间?你会提出100个请求的中位数吗?如果你收到一个超出中位数的请求怎么办
  • 假设您总是等待尽可能长的时间(以确保一切正常),为什么您的大多数用户的体验会更差
  • 但如果你坚持这样做,那么来自“chockleyc”和“Johannes p”的两个答案都应该澄清你所有的问题


    现在就这些,我希望它能有所帮助

    不要延迟:从服务器获得响应时执行您的函数。发出此请求的代码在哪里?如何完成?我是JS的新手。谢谢。显示发出请求的代码,这样我们就可以知道如何调整它(可能有某种方法可以传递回调)。为什么现在无法从服务器获取图像,有什么不适用于您的代码段?请。这在这里没有帮助。OP不应该拖延。这是对一个糟糕问题的直接回答。我认为没有理由投反对票,因为此人只是在回答。
    var getRequest()
        .then(console.log);