javascript - JS 回调不起作用
问题描述
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function f() {
g(function(err){
if(!err){
alert('Call me later');
}
});
}
function g(callback) {
setTimeout(function(){ alert("Call me first after 3 sec"); }, 3000);
callback(false);
}
</SCRIPT>
</HEAD>
<BODY onload="f()">
</BODY>
</HTML>
在上面的代码片段中,我的目标是了解 JavaScript 回调功能。
我放了两个警报。我希望“先给我打电话”在 3 秒后发出警报,然后“稍后给我打电话”。但是,这不是警报发生的顺序。
解决方案
这与您进行的异步调用有关。
调用该函数g
将对其两行代码执行两个操作。首先,它将创建一个任务并安排它在 3000 毫秒内运行。其次,它会调用回调。回调然后警报'Call me later'
。
如果超时中的代码调用了回调,那么稍后调用我会排在第二位,但由于它没有,并且超时不是阻塞调用,你会看到当前的行为。
如果您希望警报排在第二位,则应该超时。
function g(callback) {
setTimeout(function(){
alert("Call me first after 3 sec");
callback(false);
}, 3000);
}
推荐阅读
- python - Python中的列表数据结构
- javascript - 使用Javascript从右到左滚动进度条
- java - 无法获得 kafka 的偏移滞后。原因:org.apache.kafka.shaded.common.config.ConfigException
- node.js - 在 Express 中,我的路由目录中的 router.get('/') 如何处理除 '/' 以外的请求?
- javascript - 浏览器扩展:加载元素时如何执行函数
- arrays - 如何在 Ruby on Rails 中拆分字符串并将其转换为值列表
- micronaut - 如何将外部 application.yml 加载到使用 Micronaut Picocli 开发的应用程序中?
- javascript - 从现有数组创建新数组
- php - php ucfirst ucwords 讨论
- node.js - 为什么承诺已解决的对象未定义?