-2

我有以下代码:

function generateRandomTeams() {
  const prom = new Promise(() => {
    // ...
    console.log('teams', props.state.teams) // logs
  })
  .then(() => {
    console.log('here') // doesn't log
  })
}

我实际上是在执行.then(() =>第一个块(顶部的块)之后尝试执行函数。但是,该函数不会进入“then”部分。

为了澄清,我在这个过程中没有返回任何东西。

我怎样才能实现延迟的承诺电话?提前致谢。

4

2 回答 2

4

你没有解决Promise这就是为什么它不会进入then块。您要么需要resolvepromise 以便then块运行,要么需要promisereject以便catch块运行。如果你不做任何这些,那么承诺将永远处于pending状态。

此图取自MDN

MDN 承诺图片

function generateRandomTeams() {
  const prom = new Promise((res, rej) => {
      console.log("teams"); // logs
      res();
    })
    .then(() => {
      console.log("here"); // doesn't log
    })
}

generateRandomTeams();

如果你想运行该块,catch那么你必须rejectPromise

function generateRandomTeams() {
  const prom = new Promise((res, rej) => {
      console.log("teams"); // logs
      rej();
    })
    .then(() => {
      console.log("here"); // doesn't log
    })
    .catch(() => {
      console.log("Error");
    });
}

generateRandomTeams();

于 2021-06-20T11:23:29.007 回答
1

因为then你需要解决promise.

function generateRandomTeams() {
  const prom = new Promise(resolve => {
    // ...
    console.log('teams') // logs
    resolve();
  })
  .then(() => {
    console.log('here') // doesn't log
  })
}

generateRandomTeams();

但是请注意, then 大多数时候不是这样使用的,而是像这样:

function GenerateRandomTeams() {
  return new Promise(resolve => {
    // ...
    console.log('teams') // logs
    setTimeout(() => {resolve()}, 3500);
  });
}

GenerateRandomTeams()
.then(() => {
  alert("3.5 seconds later: Then executed");
})

于 2021-06-20T11:25:55.663 回答