javascript - ECMAScript 6 promise

标签 javascript es6-promise

我想了解 promises,但我遇到了问题。

function commentFirst() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('first');
      resolve('value');
    }, 1500);
  });
}

commentFirst().then((val) => {
  setTimeout(function() {
    console.log(val + ' 1')                   
  }, 2000);

  return val;
}).then((val1) => console.log(val1 + ' 2'));

我想要这样的输出:

first
value 1
value 2

我做错了什么?

最佳答案

在第二个 .then 中,您正在执行一个没有任何 promise 的 setTimeout,因此它会立即执行并返回,甚至在 setTimeout 执行之前。我添加了一个 promise ,这样当 setTimeout 执行时,它将解决 promise ,然后继续执行您需要的命令。

function commentFirst() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('first');
      resolve("value");
    }, 1500);
  });
}

commentFirst()
  .then((val) => {
    return new Promise(resolve => {
      setTimeout(function() {
        console.log(val + ' 1')
        resolve(val);
      }, 2000);
    })
  })
  .then((val1) => console.log(val1 + ' 2'));

codepen demo

关于javascript - ECMAScript 6 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261282/

相关文章:

javascript - JS代码提取Youtube Livestream视频ID

javascript - Backbone.js: View 未渲染

javascript - Javascript Promise 如何与 setTimeOut 配合使用

javascript - 根据背景图像分配 JQuery 选择器

javascript - CodeMirror 自定义 showHint() 调用不起作用

javascript - FancyBox 2.iframe。在表单元素中输入文本时,它会跳转到底部

webpack - 如何使用 babel 7 填充 Promise.any()?

javascript - Google Calendar API 和 JS Promise

async-await - 我们不需要比 Promise.all 更好的东西吗?

javascript - 为什么在 Node 7.2.0 中记录被拒绝的 `Promise` 也会导致记录堆栈跟踪?