美文网首页
Promise resolve 说明

Promise resolve 说明

作者: A_1341 | 来源:发表于2018-10-30 21:04 被阅读0次

如果 promise1 内 resolve 的是另外一个 promise2, promise1 状态会无效. 相当于 promise1 的后续 then, catch 会自动挂在 resolve 的 promise2 上.

var timeout = ms => {
  return new Promise((resolve, reject) => {
    console.log('timeout')
    setTimeout(()=>{
      console.log('timeoutResolve')
      resolve("123123")
    }, ms);
  });
};

var timeoutWrapper = ms => {
  return new Promise((resolve, reject) => {
    console.log('timeoutWrapper')
    setTimeout(() => {
      console.log('timeoutWrapperResolve')
      resolve(timeout(ms));
    }, ms);
  });
};


timeoutWrapper(1000).then(data => {
  console.log(data)
  console.log("sec");
});

相关文章

如果调用resolve函数和reject函数时带有参数,那么它们的参数会被传递给回调函数。reject函数的参数通常是Error对象的实例,表示抛出的错误;resolve函数的参数除了正常的值以外,还可能是另一个 Promise 实例,比如像下面这样。

const p1 = new Promise(function (resolve, reject) {
  // ...
});

const p2 = new Promise(function (resolve, reject) {
  // ...
  resolve(p1);
})

上面代码中,p1和p2都是 Promise 的实例,但是p2的resolve方法将p1作为参数,即一个异步操作的结果是返回另一个异步操作。

注意,这时p1的状态就会传递给p2,也就是说,p1的状态决定了p2的状态。如果p1的状态是pending,那么p2的回调函数就会等待p1的状态改变;如果p1的状态已经是resolved或者rejected,那么p2的回调函数将会立刻执行。

const p1 = new Promise(function (resolve, reject) {
  setTimeout(() => reject(new Error('fail')), 3000)
})

const p2 = new Promise(function (resolve, reject) {
  setTimeout(() => resolve(p1), 1000)
})

p2
  .then(result => console.log(result))
  .catch(error => console.log(error))
// Error: fail

上面代码中,p1是一个 Promise,3 秒之后变为rejected。p2的状态在 1 秒之后改变,resolve方法返回的是p1。由于p2返回的是另一个 Promise,导致p2自己的状态无效了,由p1的状态决定p2的状态。所以,后面的then语句都变成针对后者(p1)。又过了 2 秒,p1变为rejected,导致触发catch方法指定的回调函数。

相关文章

网友评论

      本文标题:Promise resolve 说明

      本文链接:https://www.haomeiwen.com/subject/cqyntqtx.html