//Promise.resolve()和Promise.reject()常用来生成已经被决议为失败或者成功的promise案例
//Promise.reject()简单一些,不管传给它什么值,它决议为失败后就会直接把这个值传递过来

一、Promise.resolve
1.传递一个普通的值(比如字符串,数字等等)

            let p1 = new Promise(resolve => {
resolve('成功');
})
//和上面是等价的
let p2 = Promise.resolve('成功'); //会直接决议为成功并把这个值传递过去

2.传递一个promise实例

            let cn = new Promise( resolve =>{
resolve('耶')
})
//直接返回传递进去的promise
let p = Promise.resolve(cn); //这里直接将cn实例返回给了p
p.then(data => void console.log(data)) //后打印结果为耶
console.log( p === cn) //先打印true

3、

传递一个thenable对象(和类数组的概念有些相似)
//鸭子类型:一只鸡如果看起来像鸭子,那么它就是鸭子。在鸭子类型中,关注的不是对象的类型本身,而是他如何使用的。
//具有then方法的对象,看着像promise,那就把它转成promise,保留then

let  obj = {  //obj就是一个thenable对象
then(cb){
console.log('我被执行了'); //先打印'我被 执行了'
cb('哼')
},
oth(){
console.log('我被抛弃了') //不打印
}
}
//立即执行then方法
Promise.resolve(obj).then(data => {
console.log(data) //打印出'哼'
})
//总结:传进thenable对象时,会立即执行then方法,如果then方法中有回调,也会在thenable对象中被调用

二、Promise.reject

Promise.reject({ then() { console.log(1) } })
.then( () =>{
console.log('我不会被执行')
}, e => {
console.log(e) //不管在reject()中传递什么值,在这里拿到的就是什么值
})

三、

Promise在决议之后是异步去做他接下来要去做的事情
//打印结果按顺序为 123465

console.log(1);

            let pp = new Promise(resolve => {
console.log(2);
resolve();
console.log(3);
}) console.log(4); p.then( () =>{
console.log(5); //异步是最后执行的
}) console.log(6)
//总结:一般情况下,在当前这一轮的事件循环中,异步任务肯定是在同步任务之后执行的

四、把同步的任务转成异步任务

            function createAsyncTask(syncTask){
return Promise.resolve(syncTask).then(syncTask => syncTask())
} createAsyncTask( () =>{
console.log('我变成了异步任务') //第二输出
return 1+1
}).then(res => {
console.log(res); //最后输出
}) console.log('我是同步任务') //最先输出

Promise.resolve()与Promise的更多相关文章

  1. Promise.resolve的作用

    Promise.resolve方法有下面三种形式: Promise.resolve(value); Promise.resolve(promise); Promise.resolve(thenable ...

  2. AngularJS进阶(三十六)AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记)

    AngularJS项目开发技巧之利用Service&Promise&Resolve解决图片预加载问题(后记) 前言 在"AngularJS项目开发技巧之图片预加载" ...

  3. ES6中的Promise.resolve()的作用

    var foo = { then: (resolve, reject) => resolve('foo') }; var resolved = Promise.resolve(foo); 相当于 ...

  4. Promise.resolve解析

    总结自:https://blog.csdn.net/lq15310444798/article/details/81275278 Promise.resolve返回一个Promise实例 参数分4种情 ...

  5. [转载]es6 Promise.resolve()方法

    es6 Promise.resolve()方法 2018-01-27 22:29:06 ixygj197875 阅读数 16925更多 分类专栏: ES6标准入门 (阮一峰) ES6标准入门   Pr ...

  6. Promise.resolve( data)与Promise.reject( data )

    Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...

  7. Promise.resolve(x)中x有几种情况

    ps:下面参数说的是Promise.resolve(x)中的x 一共四种情况: 1.如果参数是Promise实例本身,则抛出错误 2.如果参数是一个promise对象,则then函数的执行取决于这个参 ...

  8. Promise(resolve,reject)的基本使用

    什么是Promise? Promise是一个构造函数,其原型上有 then.catch方法,还有reslove,reject等静态方法.通过创建Promise实例,可以调用Promise.protot ...

  9. 理解和使用Promise.all和Promise.race

    一.Pomise.all的使用 Promise.all可以将多个Promise实例包装成一个新的Promise实例.同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回 ...

随机推荐

  1. 队列Queue:任务间的消息读写,安排起来~

    摘要:本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十三 消息队列Queue>,作者:zhushy . 队列(Queue)是 ...

  2. dos命令的学习

    打开CMD的方式 开始+系统+命令提示符 Windows+R+输入CMD 在任意的文件夹下面,按住shift+点击鼠标右键,在此处打开命令行窗口 资源管理器的地址栏前面加上CMD路径 管理员方式运行: ...

  3. map 和 unordered_map

    map就是映射. 定义 map<typename,typename> 注:map的元素是pair. 特性 map会对第一个对象自动排序. map不允许有两个相同的关键字. map可以定义迭 ...

  4. 本地项目的npm安装方法

    有些node项目如一些工具类的项目,安装以后通过命令行执行其功能.但是而对于本地自建的项目如何通过npm安装,然后通过命令行(项目定义了命令行)工具执行命令调用其功能呢? 对于这种情况,笔者主要通过两 ...

  5. Skywalking-03:Skywalking本地调试

    live-demo 与 skywalking 源码联调 构建项目 找一个目录执行如下命令 git clone https://github.com/apache/skywalking.git # cl ...

  6. python进程间的通讯实现

    1:进程间通讯的方法:apply_async()非阻塞式通讯     apply()阻塞式通讯 2:使用Queue实现对Process创建的进程间通讯, Queue本身是一个消息队列程序,Queue常 ...

  7. 01MATLAB导论

    MATLAB语言的主要功能 数值计算 符号计算 图形绘制 程序流程控制 工具箱 课程的学习目标 要求理解MATLAB功能实现的数学背景与算法原理 掌握利用MATLAB进行问题求解的基本规律 能够利用M ...

  8. elementUI的el-input和el-select宽度 一致

    在用vue时,用到了element组件的 el-input 和 el-select(多选框)组件,但是宽度显示不一样,查看了多选框的css,发现element-style是写死的 添加style=&q ...

  9. Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

    影响版本 Spring WebFlow 2.4.0 - 2.4.4 访问id为1的酒店http:/ :8080/hotels/1,点击预订按钮"Book Hotel",填写相关信息 ...

  10. BUUCTF-[HCTF 2018]admin(Unicode欺骗&伪造session)

    目录 方法一:Unicode欺骗 方法二:伪造session 参考文章 记一道flask下session伪造的题. 方法一:Unicode欺骗 拿到题目f12提示you are not admin,显 ...