Promise.resolve等价于下面的写法

有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用。

Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))

Promise.resolve方法的参数分成四种情况

参数是一个 Promise 实例

如果参数是 Promise 实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例。

参数是一个thenable对象

thenable对象指的是具有then方法的对象,比如下面这个对象

let thenable = {then: function(resolve, reject) {resolve(42);}
};

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

let thenable = {then: function(resolve, reject) {resolve(42);}
};let p1 = Promise.resolve(thenable);
p1.then(function(value) {console.log(value);  // 42
});

thenable对象的then方法执行后,对象p1的状态就变为resolved,从而立即执行最后那个then方法指定的回调函数,输出 42

参数不是具有then方法的对象,或根本就不是对象

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

const p = Promise.resolve('Hello');p.then(function (s){console.log(s)
});
// Hello

由于字符串Hello不属于异步操作(判断方法是字符串对象不具有 then 方法),返回 Promise 实例的状态从一生成就是resolved,所以回调函数会执行。Promise.resolve方法的参数,会同时传给回调函数

广州品牌设计公司https://www.houdianzi.com PPT模板下载大全https://redbox.wode007.com

不带有任何参数

Promise.resolve方法允许调用时不带参数,直接返回一个resolved状态的 Promise 对象。

setTimeout(function () {console.log('three');
}, 0);Promise.resolve().then(function () {console.log('two');
});console.log('one');// one
// two
// three

.then()函数里不返回值或者返回的不是promise,那么 then 返回的 Promise 将会成为接受状态(resolve)

Promise.resolve().then(() => console.log(2)).then(() => console.log(3));
console.log(1); // 1, 2, 3

需要注意的是,立即resolve的 Promise 对象,是在本轮“事件循环”(event loop)的结束时执行执行,不是马上执行,也不是在下一轮“事件循环”的开始时执行

原因:传递到 then() 中的函数被置入了一个微任务队列,而不是立即执行,这意味着它是在 JavaScript 事件队列的所有运行时结束了,事件队列被清空之后,才开始执行

resolve()本质作用

  • resolve()是用来表示promise的状态为fullfilled,相当于只是定义了一个有状态的Promise,但是并没有调用它;
  • promise调用then的前提是promise的状态为fullfilled;
  • 只有promise调用then的时候,then里面的函数才会被推入微任务中;

Promise.resolve几种情况相关推荐

  1. promise.then返回结果几种情况

    Promise是ES6提出的异步编程的新解决方案,旧方案是单纯的使用回调函数.从语法上看,Promise是一个构造函数,既然是构造函数就可以用来对象的实例化,接受一个函数(执行器函数)作为参数,从功能 ...

  2. promise的状态值_什么是Promise,Promise的三种状态

    什么是Promise对象: Js中进行异步编程的新的解决方案,用于表示一个异步操作的最终完成 (或失败), 及其结果值.. 语法上:promise是一个构造函数 简单来说,promise对象用来封装一 ...

  3. es6 Promise.resolve()方法

    Promise.resolve()方法 有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用. const jsPromise = Promise.resol ...

  4. Promise构造函数的方法1:Promise.resolve()和Promsie.reject()

    1.promise.resolve() 它是成功状态的Promsie的一种简写方式. 参数传递:(以下重点掌握一般参数的传递): 1)一般参数和参数为空的情况下,直接返回一个resolved状态的Pr ...

  5. 什么是Promise,Promise的三种状态

    什么是Promise对象: Js中进行异步编程的新的解决方案(传统的解决方案--回调函数和事件),用于表示一个异步操作的最终完成 (或失败), 及其结果值.. 语法上:promise是一个构造函数 简 ...

  6. promise的三种状态_一.Promise中核心逻辑的实现

    首先看一下Promise代码: let promise =new Promise((resolve,reject)=>{resolve('成功');//reject('失败'); }) prom ...

  7. C++中Future和Promise的一种简单实现

    女主宣言 由于工作需求,笔者最近在阅读 Pulsar C++ 客户端的实现,发现该客户端虽然是基于 C++11 编写的,但却自己编写了 Future 和 Promise 类,随着阅读的深入,也体会到了 ...

  8. 中的listeners_C++中Future和Promise的一种简单实现

    女主宣言 由于工作需求,笔者最近在阅读 Pulsar C++ 客户端的实现,发现该客户端虽然是基于 C++11 编写的,但却自己编写了 Future 和 Promise 类,随着阅读的深入,也体会到了 ...

  9. dom不刷新 vue 加数据后_详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结...

    如果你发现你自己需要在 vue 中做一次强制更新,99.9% 的情况,是你在某个地方做错了事. 1. vue 无法检测实例被创建时不存在于 data 中的 property 原因:由于 vue 会在初 ...

最新文章

  1. 探寻AI未来式,百度AI Studio两周年寻最强锦鲤送超大惊喜
  2. 局域网常用的DOS命令查IP
  3. USACO Training Section 1.1 Your Ride Is Here
  4. [AtCoder Educational DP Contest] V - Subtree(树形dp + 前缀积/后缀积)
  5. 加入域时出现以下错误 登陆失败 该目标账户名称不正确_微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新...
  6. 【回环检测】如何理解loopClosing中的连续性检测
  7. XCode中的Debug View Hierarchy功能
  8. iOS开发之App开发团队必须知道的 iOS 11 更新点几iPhoneX的屏幕适配
  9. nuxt.js实战之window和document对象的使用
  10. window使用fliqlo 教程
  11. 秒、毫秒和年月日的转换
  12. md5加密算法使用流程
  13. 服务器蓝屏显示7f,电脑蓝屏代码7f怎么解决 如何处理电脑蓝屏代码7f
  14. 清凉-明智左马介秀满的一生
  15. iMX6UL配置MCP2515模块(SPI转CAN)——基于迅为iTOP-iMX6UL开发板
  16. Python Appium自动化测试 连接模拟器启动淘宝APP
  17. 前端:3分钟实现一个共享桌面,还能听见麦克风声音哦
  18. 绿地控股2020年净利润下滑约7%,销售金额同比减少7.7%
  19. 前端技术周刊 2018-12-24:移动无限加载
  20. 《如何高效学习》总结

热门文章

  1. Spring security的基础用法(普通的用户认证和授权)
  2. asterisk恢复
  3. IDL编译器系列-入门篇
  4. windows 下端口转发 端口映射工具 passport
  5. 基于BIM+3DGIS物联网技术,如是实现智慧园区(楼宇)可视化管控平台的?
  6. 【BIOS】MBR引导程序类型及详解
  7. button控件具体用法(CommandName, CommandArgument)
  8. 一文搞懂MD5、SHA-1、SHA-2、SHA-3,哪个算法比较安全
  9. 【计算机毕业设计】248高校奖学金管理系统
  10. BBTRZ柔性矿物质绝缘防火电缆的优势