Promise的resolve方法和reject方法

Promise.resolve方法返回一个promise的实例

Promise.resolve('foo');//等价于如下
new Promise((resolve)=>{resolve('foo');
})

根据参数不同,分为一下几种情况

(1)参数是一个Promise的实例

如果参数是一个Promise的实例,那么Promise.resolve将不作任何修改,原封不动的返回这个实例

(2)参数是一个thenable对象

Promise.resolve方法会将这个对象转为Promise对象,然后立即执行thenable对象的then方法

//thenable对象
let thenable = {then:function(resolve,reject){resolve(42);}
}
//下面会将thenable对象转换为Promise对象
let p = Promise.resolve(thenable);
p.then((value)=>{console.log(value);//42
});

(3)参数不是具有then方法的对象或者不是对象

如果参数是一个原始值,或者是一个不具有then方法的对象,那么Promise.resolve方法返回一个新的Promise对象,状态为Resolved。

var p = Promise.resolve("hello 1024");//字符串不属于异步操作,判断方法是不具有then方法,返回的Promise的实例从生成起就是Resolved,所以回调函数会立即执行。Promise.resolve参数就会同时传给回调函数
p.then((value)=>{console.log(value);//hello 1024
});

(4)不带任何参数

Promise.resolve方法允许在调用的时候不带任何参数,直接返回一个状态为resolved的Promise对象,所以如果希望得到一个Promise对象,最直接的方法就是直接调用Promise.resolve方法

var p = Promise.resolve();
p.then((resolve)=>{
}).catch((reject)=>{
});

需要注意得是,立即resolve的Promise对象是在本轮“事件循环”event loop结束时,不是在下一轮“事件循环”开始时,通过代码说明

setTimeout(function(){console.log("three");//下一轮事件循环执行
},0);
Promise.resolve().then(function(){console.log("two");
});
console.log("one");
//输出是one,two,three不是one,three,two

而Promise.reject方法会原封不动的将reject的理由变成后续方法的参数,这一点和Promise.resolve方法不一致

Promise的resolve方法和reject方法相关推荐

  1. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  2. python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法

    概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...

  3. JS服务器端开发基础篇(Array.slice方法和splice方法)

    Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混.搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正.  一.slice ...

  4. Loader的load方法和loadBytes方法LoaderContext参数

    (1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下. 关于Loader的load方法和loadBytes方法LoaderContext参数的问题.. 要加载某个SWF到自己的安全域内 ...

  5. ThinkPHP 中M方法和D方法的具体区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  6. asp.net TemplateField模板中的Bind方法和Eval方法

    TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现.以下是Bind方法的格式,Eval的格式也是和Bind一样的. Bind("列 ...

  7. hashcode()方法和equals()方法

    一.hashcode()方法和equals()方法的介绍 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.eq ...

  8. 并发基础篇(六):线程Thread类的start()方法和run()方法

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  9. 请简述一下线程的sleep()方法和yield()方法的区别?

    请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...

  10. 面向对象回顾(构造函数、覆盖和重载、Query接口的list方法和iterate方法、面向对象的六原则一法则、反射、内部类)

    1. 什么是构造函数?什么是构造函数重载?什么是复制构造函数? 当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数. 在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个 ...

最新文章

  1. 策略模式(Strategy Pattern)
  2. 添加github ssh 公钥
  3. Redux异步中间件
  4. 如何找到 SAP 电商云 Spartacus UI 导航 navigation 的驱动器 - NavigationEntryItemEffects
  5. 栈和队列都是限制存取点的线性结构_栈的练习以及解析
  6. java 注释 depredated_depredated是什么意思_depredated怎么读_depredated翻译_用法_发音_词组_同反义词-新东方在线英语词典...
  7. 如何平衡存储系统的一致性和可用性?
  8. Linux基础_Hadoop环境搭建必备
  9. 疑似小米9真机谍照首曝:后置三摄+屏幕指纹识别
  10. mvc js ajax实例,MVC ajax异步上传文件例子(ajaxFileUpload)
  11. 打印网页去掉网址html,Print Edit WE插件,编辑\隐藏\删除网页元素,并支持保存和打印新页面...
  12. android 优秀控件以及开源项目
  13. SSH攻击ip列表【不定时更新】
  14. 银河麒麟SP1解压压缩包后文件名称乱码
  15. 跳转gridview
  16. 计算机网络序号是什么,Excel序号是什么 Excel序号详细介绍
  17. Vscode 打开终端窗口
  18. 网络打印机计算机服务,如何把局域网中的所有计算机及打印机设置共享?
  19. linux客户端连接iscsi,配置ISCSI客户端(LINUX)redhat5-iSCSI-INITIATOR
  20. 15张图详解四线制SPI通讯

热门文章

  1. xp系统从u盘启动计算机,电脑高手教你如何用u盘启动装xp系统!
  2. android7.1.2安装包,APK.1文件安装器下载-APK.1安装:微信APK安装器下载1.7 安卓版-西西软件下载...
  3. 瑞斯康达串口-console接口线序和通用调试线改造图文教程
  4. 点歌系统源码 android,安卓盒子点歌系统代码
  5. redis实现分布式锁的几种方式
  6. Android 图片虚化,虚化图片,模糊图片
  7. java微信学生考勤小程序前台vue和后台(考勤,请假,校园新闻,导出,地图等)(需要使用的软件)打包源码及安装视频+功能文档
  8. 苦熬31年终于登陆科创板!WPS如何一步步熬到了今天?
  9. 计算机网络重置点命令,WinXP系统如何通过cmd命令对网络进行重置
  10. C语言中的main函数