我可以在if语句中对返回的元素调用超时函数吗?

时间:2016-02-01 17:04:22

标签: javascript

我可以在if语句中对返回的元素调用超时函数吗?

var data = 'some stuff';

if(data){
  return jQuery('<div class="thisDiv"></div>').html(data);  
}

我尝试过以下方法:

if(data){
    setTimeout(function() {
        return jQuery('<div class="thisDiv"></div>').html(data); 
    }, 100);
}

但我在控制台中收到此错误:

Uncaught TypeError: Cannot read property 'nodeType' of undefined

4 个答案:

答案 0 :(得分:3)

return语句将从您传递给setTimeout函数的匿名函数返回,而不是包含if语句范围的函数。尝试将回调传递给包含if语句的函数,然后使用data作为参数调用该回调。

function delayedReturn(callback) {
  if(data) {
    setTimeout(function() {
      callback(jQuery('<div class="thisDiv"></div>').html(data)); 
    }, 100);
  }
}

答案 1 :(得分:2)

没有。当函数返回时,您不能使用setTimeout来延迟。它不是睡眠功能。它将一个函数放在队列中以便稍后运行,它不会在一段时间内停止所有处理。

function a() {
    return 1;
}

var x = a();

在上面你有一个函数,它有一个return语句。它返回的值分配给x

function b() {
    setTimeout(function c() {
        return 1;
    }, 1000);
}

var y = b();

现在你有两个功能。 b没有返回语句,因此返回undefinedundefined存储在y

b使用setTimeout来调用c,而c使用return语句。 setTimeout虽然没有对返回值执行任何操作,但c的返回值将被丢弃。

每次处理异步函数时,都必须对异步回调中的数据执行某些操作(例如调用另一个函数并将数据作为参数传递)。没有回头,为时已晚。

您可以从b返回Promise。这将允许其他代码使用y的值来绑定在超时到期时将触发的事件处理程序。

答案 2 :(得分:1)

你当然可以,你需要移除return并使用有效的选择器来定位你的div。

这样的事情会起作用:

HTML

<div class="thisDiv">test</div>

使用Javascript:

var data = 'some stuff';

if(data){
    setTimeout(function() {
        jQuery('.thisDiv').html(data); 
    }, 100);
}

您可以在此处看到它:https://jsfiddle.net/ckkz1wbf/

答案 3 :(得分:1)

问题,您为什么使用:

jQuery('<div class="thisDiv"></div>')

您是否尝试创建元素,如果是这种情况,您可以使用jquery的延迟。

function fn(){
    var data = 'some stuff';
    if(data){
        return jQuery('<div class="thisDiv"></div>').delay(100).html(data);
    }
}