javascript - 没有调用 .then 方法时,Promise 是如何运行的?

标签 javascript promise es6-promise

我创建了两个 promise ,但我没有对这些 promise 运行 then 方法。然而,一旦 promise 对象超出范围,promise 代码就会像调用 .then 一样运行。

如何在不调用 .then 方法的情况下解决 Promise 问题?

我问是因为我想加载一个包含 Promise 对象的数组,然后按顺序运行 promise。

function promises_createThenRun() {
  const p1 = createPromise1();
  const p2 = createPromise2();

  console.log('before hello');
  alert('hello');
  console.log('after hello');
  // the two promises run at this point.  What makes them run?
}

function createPromise1() {
  let p1 = new Promise((resolve, reject) => {
    window.setTimeout(() => {
      console.log('timer 1');
      resolve();
    }, 2000);
  });
  return p1;
}

function createPromise2() {
  let p2 = new Promise((resolve, reject) => {
    window.setTimeout(() => {
      console.log('timer 2');
      resolve();
    }, 1000);
  });
  return p2;
}

最佳答案

Promise 构造函数中的代码在创建 promise 时运行,并且同步运行,这让一些人感到惊讶。所以即使没有 then() 一切仍然运行。

new Promise(resolve => console.log("running"))

然而,setTimeout 回调中的代码在调用之前不会运行,但即使没有 then() 也会运行

new Promise(resolve => {
  console.log("promise created")
  setTimeout(() => console.log("this runs later"), 1000)
})

关于javascript - 没有调用 .then 方法时,Promise 是如何运行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431235/

相关文章:

javascript - 链接多个 Promise

javascript - 两个窗口之间交换信息

javascript - 使用 javascript 检索 url 查询字符串来解析 if/else 语句并重定向

javascript - jquery $.when.apply().done 未触发

javascript - 我总是收到 JSON 循环结构错误和未处理的 promise 拒绝警告。我该如何摆脱它?

javascript - Promise.all : Order of resolved values

javascript - 将 D3.js 创建的下拉菜单交换为 HTML 创建的下拉菜单

javascript - 有没有更好的方法将子级数组合并为一个数组?

javascript - Jquery ajax promise 返回未定义

javascript - 返回新的 Promise 和 Promise.resolve 的区别