我是 javascript 和 promises 的新手。我试图让一个函数在第一个函数完成之前不开始运行。
在这种情况下,我希望“dontDoUntilDelayIsComplete”函数在“delayGreet”函数之后运行。
function delayGreet() {
setTimeout(greet, 1000);
}
function greet() {
para1.textContent = "Hi there!";
}
function createPromise() {
return new Promise((resolve) => resolve(delayGreet));
}
function dontDoUntilDelayIsComplete() {
para2.textContent = "Please dont do before";
}
function callMethod() {
createPromise().then(dontDoUntilDelayIsComplete);
}
callMethod();`
我试过将函数放在承诺中并使用 .then() 方法。但是,我无法让它工作。
.then 以结果(承诺的解决)作为参数的回调函数
createPromise.then(res => dontDoUntilDelayIsComplete())
我认为这不准确:
“我希望“dontDoUntilDelayIsComplete”函数在“delayGreet”函数之后运行”
我觉得你想让
dontDoUntilDelayIsComplete
追着greet
跑,这是不一样的
setTimeout
不创建承诺,它只是安排一个函数运行。如果你想在那之后立即运行一些东西,那么也要安排它。
function greet() {
console.log("Hi there!");
}
function dontDoUntilDelayIsComplete() {
console.log("Please dont do before");
}
function delayGreet() {
function greetThenDoSomethingElse() {
greet();
dontDoUntilDelayIsComplete();
}
setTimeout(greetThenDoSomethingElse, 1000);
}
delayGreet();
这是一个带有通用回调的解决方案:
function greet() {
console.log("Hi there!");
}
function dontDoUntilDelayIsComplete() {
console.log("Please dont do before");
}
function delayGreetThenCallback(callback) {
function greetThenCallback() {
greet();
callback();
}
setTimeout(greetThenCallback, 1000);
}
delayGreetThenCallback(dontDoUntilDelayIsComplete);
这是一个有承诺的人:
function greet() {
console.log('Hi there!');
}
function dontDoUntilDelayIsComplete() {
console.log('Please dont do before');
}
function delayGreet() {
return new Promise((resolve) =>
setTimeout(() => {
greet();
resolve();
}, 1000)
);
}
delayGreet().then(() => dontDoUntilDelayIsComplete());