function one(){
console.log(1);
}
function two(callback){
setTimeout(()=>{
console.log(2);
},2000);
callback();
}
two(one);
当我运行此代码时,首先显示1,然后显示2,因为2需要2秒才能显示。假设如果函数2中有一个api而不是console.log(2),它需要2秒钟来响应,那么在函数2完成后,我如何使用callback()来调用函数一;如果我在setTimeout函数中使用callback(),在这种情况下该怎么办,但是如果有一个不使用setTimeout且需要2-3秒的api怎么办?
答案 0 :(得分:3)
即使有一个api
调用需要花费一些时间来解决,您仍然可以按照与setTimeout
示例相同的方式使用回调。
或者,使用Promise
:
function two(callback) {
new Promise(res => {
setTimeout(() => {
res();
}, 2000);
}).then(callback)
}
或使用async/await
语法:
async function two(callback) {
await new Promise(res => {
setTimeout(() => {
res();
}, 2000);
})
callback();
}
答案 1 :(得分:1)
您可以使用Promises:
function one(){
console.log(1);
}
function two(){
return new Promise((resolve, reject) => {
setTimeout(()=>{
console.log(2);
resolve()
},2000);
})
}
two().then(() => one())
答案 2 :(得分:1)
答案 3 :(得分:0)
将callback();
放在setTimeout
内:
function one(){
console.log(1);
}
function two(callback){
setTimeout(()=>{
console.log(2);
callback();
},2000);
}
two(one);