扫码关注官方订阅号
看了阮一峰的es6入门,对Promise.resolve()方法还有些疑惑,当给这个方法传入一个thenable对象作为参数时,到底发生了什么?又有何作用呢?
认证高级PHP讲师
这是个语法糖吧
var foo = { then: (resolve, reject) => resolve('foo') }; var resolved = Promise.resolve(foo); 相当于 var resolved = new Promise((resolve, reject) => { foo.then(resolve, reject) }); resolved.then((str) => console.log(str);//foo )
@心不在焉 的答案是对的。
Promise.resolve方法有下面三种形式:
Promise.resolve
Promise.resolve(value); Promise.resolve(promise); Promise.resolve(theanable);
这三种形式都会产生一个新的Promise。其中:
第一种形式提供了自定义Promise的值的能力,它与Promise.reject(reason)对应。两者的不同,在于得到的Promise的状态不同。
Promise.reject(reason)
第二种形式,提供了创建一个Promise的副本的能力。
第三种形式,是将一个类似Promise的对象转换成一个真正的Promise对象。它的一个重要作用是将一个其他实现的Promise对象封装成一个当前实现的Promise对象。例如你正在用bluebird,但是现在有一个Q的Promise,那么你可以通过此方法把Q的Promise变成一个bluebird的Promise。
实际上第二种形式可以归在第三种形式中。
Promise 的主要作用就是用于封装异步操作,以便根据异步操作是否成功来进行后续的操作。
后续操作是通过 then() 和 catch() 来申明的,但是如何触发,以及应该触发成功还是失败呢?这就靠 resolve 和 reject 这两个函数了,在 Promise 对象产生时,它们是为作封装的函数的参数的,如下
then()
catch()
resolve
reject
new Promise(function(resolve, reject) { });
这里当然你也可以改成其它名字,反正是形参嘛。不过这两个名称已经是约定俗成,最好不要改。
简单的说,resolve 的时候,会调用以后 then 里面第1个参数指定的函数
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这是个语法糖吧
@心不在焉 的答案是对的。
Promise.resolve方法有下面三种形式:这三种形式都会产生一个新的Promise。其中:
第一种形式提供了自定义Promise的值的能力,它与
Promise.reject(reason)对应。两者的不同,在于得到的Promise的状态不同。第二种形式,提供了创建一个Promise的副本的能力。
第三种形式,是将一个类似Promise的对象转换成一个真正的Promise对象。它的一个重要作用是将一个其他实现的Promise对象封装成一个当前实现的Promise对象。例如你正在用bluebird,但是现在有一个Q的Promise,那么你可以通过此方法把Q的Promise变成一个bluebird的Promise。
实际上第二种形式可以归在第三种形式中。
Promise 的主要作用就是用于封装异步操作,以便根据异步操作是否成功来进行后续的操作。
后续操作是通过
then()和catch()来申明的,但是如何触发,以及应该触发成功还是失败呢?这就靠resolve和reject这两个函数了,在 Promise 对象产生时,它们是为作封装的函数的参数的,如下这里当然你也可以改成其它名字,反正是形参嘛。不过这两个名称已经是约定俗成,最好不要改。
简单的说,resolve 的时候,会调用以后 then 里面第1个参数指定的函数