我可以在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
答案 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
没有返回语句,因此返回undefined
,undefined
存储在y
。
b
使用setTimeout
来调用c
,而c
使用return语句。 setTimeout
虽然没有对返回值执行任何操作,但c
的返回值将被丢弃。
每次处理异步函数时,都必须对异步回调中的数据执行某些操作(例如调用另一个函数并将数据作为参数传递)。没有回头,为时已晚。
您可以从b
返回Promise。这将允许其他代码使用y
的值来绑定在超时到期时将触发的事件处理程序。
答案 2 :(得分:1)
你当然可以,你需要移除return
并使用有效的选择器来定位你的div。
这样的事情会起作用:
<div class="thisDiv">test</div>
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);
}
}