Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript承诺和设置间隔的困难_Javascript_Jquery_Promise - Fatal编程技术网

javascript承诺和设置间隔的困难

javascript承诺和设置间隔的困难,javascript,jquery,promise,Javascript,Jquery,Promise,我在以下javascript中遇到问题。我正在使用jQuery框架 此代码第一次运行时,正确显示日期、温度和湿度,但第二次运行时,我收到此错误消息 未捕获的语法错误:意外的标识符 这是代码 var gettingTemperature = $.post("/get_temperature.php"); setInterval(gettingTemperature, 5000); gettingTemperature.then(function (data) { $('#da

我在以下javascript中遇到问题。我正在使用jQuery框架

此代码第一次运行时,正确显示日期、温度和湿度,但第二次运行时,我收到此错误消息

未捕获的语法错误:意外的标识符

这是代码

var gettingTemperature = $.post("/get_temperature.php");

setInterval(gettingTemperature, 5000);

gettingTemperature.then(function (data) {

        $('#date').text(data.date);
        $('#temperature').html(data.temperature + "℃");
        $('#humidity').text(data.humidity + "%");

    }, function () {
        console.log('Unable to access temperature model');
    }
);
gettingTemperature并不表示对$.post的调用,而是调用$.post的结果,后者是jqXHR对象

setInterval期望函数引用作为第一个参数,但您需要移交jqXHR对象。这就是为什么第一行只运行一次$.post,而setInterval失败的原因

var gettingTemperature = function {
    $.post("/get_temperature.php").then(function (data) {

        $('#date').text(data.date);
        $('#temperature').html(data.temperature + "℃");
        $('#humidity').text(data.humidity + "%");
    }, function () {
        console.log('Unable to access temperature model');
    });
};

gettingTemperature();
setInterval(gettingTemperature, 5000);
gettingTemperature并不表示对$.post的调用,而是调用$.post的结果,后者是jqXHR对象

setInterval期望函数引用作为第一个参数,但您需要移交jqXHR对象。这就是为什么第一行只运行一次$.post,而setInterval失败的原因

var gettingTemperature = function {
    $.post("/get_temperature.php").then(function (data) {

        $('#date').text(data.date);
        $('#temperature').html(data.temperature + "℃");
        $('#humidity').text(data.humidity + "%");
    }, function () {
        console.log('Unable to access temperature model');
    });
};

gettingTemperature();
setInterval(gettingTemperature, 5000);

您应该将一个方法传递给setInterval,但您传递的是一个承诺。通常在这种情况下,您只需将success或fail函数传递到$.post调用中,但是如果您确实需要使用promise,那么也可以。由于您不知道$.post调用将在何时返回,即需要多长时间,因此不应该使用setInterval,因为如果它需要的时间超过该时间间隔,则可能会导致多个并发请求,这不是很有用


在这种情况下,大多数人会等待第一个$.post请求完成,然后在完整的处理程序中再次调用$.post。这样,您一次只能发出一个请求。

您应该将一个方法传递给setInterval,但您传递的是一个承诺。通常在这种情况下,您只需将success或fail函数传递到$.post调用中,但是如果您确实需要使用promise,那么也可以。由于您不知道$.post调用将在何时返回,即需要多长时间,因此不应该使用setInterval,因为如果它需要的时间超过该时间间隔,则可能会导致多个并发请求,这不是很有用


在这种情况下,大多数人会等待第一个$.post请求完成,然后在完整的处理程序中再次调用$.post。这样,您一次只能发出一个请求。

获得温度是一种承诺吗?我教过我可以用ajax调用创建一个承诺,然后运行几次。承诺不能运行。是的,jqXHR实现了Promise接口,因此是Promise感谢您的帮助。gettingTemperature是一个承诺吗?我教过我可以用ajax调用创建一个承诺,然后运行几次。承诺不能运行。是的,jqXHR实现了承诺接口,因此是一个承诺谢谢你的帮助。我有christiandev,我找不到问题。我有christiandev,我找不到问题。谢谢你的帮助。我不想让我的服务器充斥着请求。如何让完整的处理程序在再次调用$.post之前等待一段时间?请使用setTimeout。它类似于setInterval函数,但它只执行提供的函数一次。感谢您的帮助。我不想用请求淹没我的服务器。如何让完整的处理程序在再次调用$.post之前等待一段时间?请使用setTimeout。它类似于setInterval函数,但它只执行提供的函数一次。