我有一些可以被这种情况模仿的代码
function abc(def){
setTimeout(1500,function(){
console.log('1');
}
def();
}
function def(){
console.log('2'}
}
我希望在2
之后打印1
-我该怎么做?
答案 0 :(得分:0)
如果您希望在延迟后也调用函数,只需将其放在延迟内即可。我添加了一些额外的控制台日志并修复了一些代码。运行以下示例以查看其工作原理。
function def() {
console.log('2 - def()');
}
function abc() {
console.log('before');
setTimeout(function() {
console.log('1');
def();
}, 1500);
console.log('after');
}
abc();
答案 1 :(得分:0)
function abc(def){
setTimeout(1500,function(){
console.log('1');
def();
}
}
答案 2 :(得分:0)
您可以使用async
和await
。将setTimeout(...)
包装在Promise中,然后在传递给setTimeout
的回调中解析Promise。
async function abc(def){
await new Promise(res => {
setTimeout(function(){
console.log('1');
res();
},1500)
})
def();
}
function def(){
console.log('2')
}
abc(def)
答案 3 :(得分:0)
setTimeout(function, milliseconds)
将具有第一个参数和延迟值(时间以毫秒为单位)的函数作为第二个参数。您以错误的顺序传递了他们。
在您的示例中def()也正在打印2并且它在setTimeout函数之外,因此它不可能在1之后打印2(因为1被记录在setTimeout内部,这意味着它将在延迟后执行) 1.5秒)。
上面Chris提供的解决方案是正确的,并且可以按照您的要求进行(打印2,然后打印1)