美文网首页
关于Promise的几点理解

关于Promise的几点理解

作者: HolidayPeng | 来源:发表于2018-09-18 14:51 被阅读115次

Promise对象为异步而生,接受一个函数作为参数,该函数里放入需要在主线程上执行的代码。该段代码在执行时,Promise的状态为Pending。执行结束后,根据结果更改状态为Resolved或Rejected。

new Promise((resolve, reject) => { /* 在主线程里执行的代码 */});

状态需要调用resolve()或reject()方法更改:

new Promise((resolve, reject) => {
    const random = Math.random();
    if (random > 0.5) {
       resolve();
    } else {
       reject();
    }
});

resolve()和reject()方法都可以接收一个值作为参数,传递给then方法中的回调函数,供回调函数作为参数使用。

new Promise((resolve, reject) => {
    const random = Math.random();
    if (random > 0.5) {
       resolve(random);
    } else {
       reject(new Error(random));
    }
}).then(res => {
    console.log('resolved:', res);
}).catch(err => {
    console.log('rejected:', err);
});

在当前Promise对象中,当resolve或reject中的参数是一个Promise对象时,当前Promise的状态由参数中的Promise状态决定:

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject(new Error( '3秒之后promise1的状态由pending更新为rejected'));
  }, 3000);
});
const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(promise1);
    console.log('1秒之后执行promise2,此时promise1还未reject,promise1 reject后promise2才能resolve');
  }, 1000);
}).then(res => {
   console.log('resolved:', res);
}).catch(err => {
   console.log('rejected:', err);
});

如果需要链式调用,前一个then()方法的参数必须是一个函数,这样该函数执行后的返回值才能作为参数传入到后一个then()方法的回调函数中。

new Promise((resolve, reject) => {
  const random = Math.random();
  if (random > 0.5) {
    resolve(random);
  } else {
      reject(new Error(random));
  }
}).then(res => {
    return (res * 10).toFixed(0);
}).then(res => {
    console.log('resolved:', res);
}).catch(err => {
    console.log('rejected:', err);
});

相关文章

  • 关于Promise的几点理解

    Promise对象为异步而生,接受一个函数作为参数,该函数里放入需要在主线程上执行的代码。该段代码在执行时,Pro...

  • 关于promise的粗浅理解

    定义 在JavaScript的世界中,所有代码都是单线程执行的。 由于这个“缺陷”,导致JavaScript的所有...

  • 关于Promise对象的理解

    简单实例 对Promise执行顺序的理解 输出结果 说明 Promise对象在创建的时候就会立即执行,所以我们看到...

  • Promise 的不完全试坑记录

    Promise 主要就是记忆一下关于 Promise 的一些不太好理解的问题 当在 resolve 或者 reje...

  • Promise async/await

    Promise async/await 参考初探promise promise 理解 JavaScript ...

  • Promise的特性及实现原理

    Promise对象的特性 要实现Promise对象首先我们要了解Promise拥有哪些特性,简单概括为以下几点1、...

  • Promise原理解析

    Promise原理解析 标签(空格分隔): Node.js Promise原理解析 简介 Promise 对象用于...

  • 关于看书的几点理解

    1、不同类型的书分类看 我认为书籍可以分为3类 第一类是文学类的书籍 主要包括诗歌,小说这种有剧情有故事的书籍,有...

  • 【前端 JavaScript 高级】06 - Promise的入

    第 1 章 Promise的理解和使用 1.1 Promise 是什么? 1.1.1 理解 抽象表达 Promis...

  • Promise用法详解

    参考promise|深入理解 promise:promise的三种状态与链式调用 Promise对象只有三种状态 ...

网友评论

      本文标题:关于Promise的几点理解

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