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

问题描述 投票:0回答:2

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

javascript asynchronous async-await promise
2个回答
-1
投票

.then 以结果(承诺的解决)作为参数的回调函数

createPromise.then(res => dontDoUntilDelayIsComplete())

-1
投票

我认为这不准确:

“我希望“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());

© www.soinside.com 2019 - 2024. All rights reserved.