javascript - 用回调调用超时
问题描述
function fn1() {
setTimeout(() => {
console.log('hello');
}, 5000);
}
function fn2() {
setTimeout(() => {
console.log('goodbye');
}, 3000);
}
a) 如何使用回调修改上述函数,使其可以先打印“hello”,然后打印“goodbye”。b)我想然后打印“再见”然后“你好”,然后只想打印“完成”。如何通过回调来做到这一点。
解决方案
我不确定我是否正确理解了您的问题,但这是否是您正在寻找的更多内容?
function fn1(callback) {
setTimeout(() => {
console.log('hello');
}, 2999);
callback();
}
function fn2() {
setTimeout(() => {
console.log('goodbye');
}, 3000);
}
fn1(function() {
fn2();
setTimeout(function() {
console.log("completed");
}, 3001)
});
如果是这样,那么您必须正确设置超时值,如果您希望它们按该顺序打印,请记住这些值也应该是连续的,否则您必须为 fn2 和以下设置新的超时console.log('Completed')
,如下所示:
function fn1(callback) {
setTimeout(() => {
console.log('hello');
}, 5000);
callback();
}
function fn2() {
setTimeout(() => {
console.log('goodbye');
}, 3000);
}
fn1(function() { // callback
setTimeout(function() { // timeout so fn2 fires once fn1 delay is finished
fn2();
setTimeout(function() {
// add your console.log("completed"); or third function
// here so it fires right after fn2
}, 3001); // 3000 fn2 timeout + 1ms more so it fires right after
}, 2001); // the difference between fn1 timeout - fn2 timeout + 1ms so it fires right after
});
推荐阅读
- sparql - 在 DBpedia Endpoint 上的 Sparql 查询中添加基于指定 releaseDate 的过滤器
- c - cs50 PSET2 替换:仅在使用 DWUSXNPQKEGCZFJBTLYROHIAVM 作为密钥加密所有字母字符时出现问题
- http - 我们可以在 SOCKS 代理中设置 HTTP 缓存吗?
- c# - 如何忽略空格并仅为数字保留特殊字符
- c# - 泛型:传递一个 int 值而不是类型
- python - Python Dataframe 块列索引不正确
- msbuild - 如何通过 makefile 覆盖 Visual Studio 2019 的 MSBuildExtensionsPath 属性?
- excel - 用于特定研究的 XLSM 函数或宏
- pandas - 如果值包含 3d 数组,如何重塑数据框中的数据
- c# - Range.Find 返回 null 并且无法识别 Count 方法