Promise实例的resolve方法
有时需要将现有对象转为Promise对象,Promise.resolve( )方法就起到这个作用
Promise.resolve('foo') // 等价于 new Promise(resolve => resolve('foo'))
(1) 参数是一个Promise实例
如果参数是Promise实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例。
(2) 参数是一个thenable对象
thenable对象指的是具有then方法的对象,比如下面这个对象
let thenable = { then: function(resolve, reject) { resolve(42); } };
Promise.resolve()方法会将这个对象转为Promise对象,然后就立即执行thenable对象的then( )方法
let thenable = { then: function(resolve, reject) { resolve(42); } };
(3) 参数不是具有then( )方法的对象,或根本就不是对象
如果参数是一个原始值,或者是一个不具有then( )方法的对象,则Promise.resolve( )方法返回一个新的Promise 对象,状态为resolved
const p = Promise.resolve('Hello'); p.then(function (s) { console.log(s) }); // Hello
上边代码生成一个新的Promise对象的实例p,由于字符串Hello不属于异步操作(判断方法是字符串对象不具有then方法), 返回 Promise 实例的状态从一生成就是resolved,所以回调函数会立即执行。Promise.resolve( )方法的参数,会同时传递给回调函数。
(4) 不带有任何参数
Promise.resolve( )方法允许调用时不带参数,直接返回一个resolved状态的Promise对象。
所以,如果希望得到一个Promise对象,比较方便的方法就是直接调用Promise.resolve( )方法。
const p = Promise.resolve(); p.then(function () { // ... });
上边代码的变量p就是一个Promise对象,需要注意的是,立即resolve( )的Promise对象,是在本轮“时间循环”event loop的结束时执行,而不是在下一轮“事件循环”的开始时。
setTimeout(function () { console.log('three'); }, 0); Promise.resolve().then(function () { console.log('two'); }); console.log('one'); // one // two // three
上边代码中,setTimeout(fn, 0)在下一轮“时间循环”开始时执行,Promise.resolve()在本轮“时间循环”结束时执行,console.log('one')则是立即执行,因此最先输出、
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端