Javascript:如何让一个函数在另一个函数完成后运行



我是javascript和promises的新手。我正在尝试让一个函数在第一个函数完成之前不开始运行。

在本例中,我想要的是dontDoUntilDelayIsComplete"函数在" delaygreeting "函数。

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()方法。但是,我无法使它工作。

我认为这是不准确的:

我想要dontDoUntilDelayIsComplete"函数在" delaygreeting "function"

我认为你想让dontDoUntilDelayIsCompletegreet之后运行,这是不同的。

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);

。然后接受一个带结果(resolve of promise)的回调函数作为参数

createPromise.then(res => dontDoUntilDelayIsComplete())

最新更新