//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. Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组

    Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组 Leetcode春季活动打卡第三天:面试题 10.01. 合并排序的数组 思路 这道题,两个数组原本就有序.于是我们采用双指针 ...

  2. 使用JavaScript输出带有边框的乘法表

    在学习JavaScript(以下简称为js)过程中,会遇到输出9*9乘法表的问题,我们都知道利用双重for循环可以很简单的在网页中打印出来,可是你在做的过程中有没有想着给这个乘法表加一点花样呢? 下面 ...

  3. springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的

    writedby 张艳涛 基于web.xml配置,有人说麻烦,tomcat给按照servlet3.0,实现了基于注解@WebServlet,有人说springmvc的springmvc.xml配置麻烦 ...

  4. weex打包android apk采坑之旅(windows)

    1. npm install weex-toolkit -g 后weex命令不起作用 ,解决办法把weex.cmd所在的目录添加到环境变量PATH 2.weex命令每次报找不到文件'C:\Progra ...

  5. 计算距离2020年圣诞节还有x天x时x分x秒

    //计算两者相差毫秒数 //创建当前时间和圣诞节时间的Date对象 var d1=new Date(); var d2=new Date('2020/12/25'); //计算相差的毫秒 var d= ...

  6. C++ //函数调用运算符重载 (仿函数)

    1 //函数调用运算符重载 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 //函 ...

  7. C++ //构造函数的分类及调用 //分类 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 //按照类型分类 普通构造 拷贝构造

    1 //构造函数的分类及调用 2 //分类 3 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 4 //按照类型分类 普通构造 拷贝构造 5 6 #include <iostream ...

  8. 使用POI导出Word(含表格)的实现方式及操作Word的工具类

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  9. @Valid和@Validated 区别

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...

  10. MySQL 不完全入门指南

    由于 MySQL 的整个体系太过于庞大,文章的篇幅有限,不能够完全的覆盖所有的方面.所以我会尽可能的从更加贴进我们日常使用的方式来进行解释. 小白眼中的 MySQL 首先,对于我们来说,MySQL 是 ...