javascript - ES6中的Promise.resolve()到底有何作用呢?
PHP中文网
PHP中文网 2017-04-11 10:33:24
[JavaScript讨论组]

看了阮一峰的es6入门,对Promise.resolve()方法还有些疑惑,当给这个方法传入一个thenable对象作为参数时,到底发生了什么?又有何作用呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
阿神

这是个语法糖吧

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
)
ringa_lee

@心不在焉 的答案是对的。

Promise.resolve方法有下面三种形式:

Promise.resolve(value);
Promise.resolve(promise);
Promise.resolve(theanable);

这三种形式都会产生一个新的Promise。其中:

第一种形式提供了自定义Promise的的能力,它与Promise.reject(reason)对应。两者的不同,在于得到的Promise的状态不同。

第二种形式,提供了创建一个Promise的副本的能力。

第三种形式,是将一个类似Promise的对象转换成一个真正的Promise对象。它的一个重要作用是将一个其他实现的Promise对象封装成一个当前实现的Promise对象。例如你正在用bluebird,但是现在有一个Q的Promise,那么你可以通过此方法把Q的Promise变成一个bluebird的Promise。

实际上第二种形式可以归在第三种形式中。

ringa_lee

Promise 的主要作用就是用于封装异步操作,以便根据异步操作是否成功来进行后续的操作。

后续操作是通过 then()catch() 来申明的,但是如何触发,以及应该触发成功还是失败呢?这就靠 resolvereject 这两个函数了,在 Promise 对象产生时,它们是为作封装的函数的参数的,如下

new Promise(function(resolve, reject) {
});

这里当然你也可以改成其它名字,反正是形参嘛。不过这两个名称已经是约定俗成,最好不要改。

简单的说,resolve 的时候,会调用以后 then 里面第1个参数指定的函数

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号