热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Es6]原生Promise的使用方法

参考:https:www.cnblogs.comimwtrp5916793.html1、newPromise(func)通过实例化构造函数成一个promise对象&#

参考:https://www.cnblogs.com/imwtr/p/5916793.html

1、new Promise(func)

通过实例化构造函数成一个promise对象,构造函数中有个函数参数,函数参数为(resolve, reject)的形式,供以函数内resolve成功以及reject失败的调用 

2、.then(onFulfilled, onRejected)

then方法,方法带两个参数,可选,分别为成功时的回调以及失败时的回调 

3、.catch(onRejected)

catch方法,方法带一个参数,为失败时的回调。其实.catch方法就是 .then(undefined, onRejected)的简化版,通过例子看看它的特点

function log(n) {return new Promise(function(resolve, reject) {setTimeout(function() {if (n % 2) {resolve('奇数:' + n);} else {reject('偶数:' + n);}}, 1000);});
}log(
2).then(function(data) {console.log(data);return log(3);
}).
catch(function(err) {console.log(err);
});

看这个例子,then中只有一个参数,调用log(2)之后reject执行,到达catch中输出

4、Promise.all()方法

Promise.all()方法接受一个promise的数组对象,只有数组中所有的promise都执行成功,整个promise才算成功,如果数组对象中有个promise执行失败,则整个promise就失败

看这个简单的例子,意图是调用log(1,2,3,4,5)这个promise完成之后再调用log(6),其中相应值小于3就resolve,反之就reject

function log() {var promises &#61; [];[...arguments].forEach(function(n) {promises.push(new Promise(function(resolve, reject) {var info &#61; &#39;&#39;;setTimeout(function() {if (n <3) {info &#61; &#39;小于3 resolve&#xff1a;&#39; &#43; n;console.log(info);resolve(info);} else {info &#61; &#39;reject&#xff1a;&#39; &#43; n;console.log(info);reject(info);}}, 1000);}));});return Promise.all(promises);}log(1, 2, 3, 4, 5).then(function(data) {console.log(data);return log(6);}).catch(function(err) {console.log(err);});

首先&#xff0c;依次将相应实例化的promise对象存入promises数组&#xff0c;通过Promise.all()调用返回&#xff0c;执行结果为

由输出结果知&#xff0c;1和2被resolve&#xff0c;3、4、5被reject&#xff0c;整个数组里已经有多于一个的promise对象被reject&#xff0c;仅仅触发了catch中的回调&#xff0c;所以log(6)得不到执行

5、Promise.race()方法

与Promise.all()类似&#xff0c;它也接受一个数组对象作为参数&#xff0c;但其意义不一样

只有数组中所有的promise都执行失败&#xff0c;整个promise才算失败&#xff0c;如果数组对象中有个promise执行成功&#xff0c;则整个promise就成功

把上述代码的all换成race&#xff0c;执行结果为&#xff1a;

6、Promise.resolve()方法

除了在实例化Promise构造函数内部使用resolve之外&#xff0c;我们还可以直接调用resolve方法

var promise &#61; Promise.resolve(&#39;resolve one&#39;);
// var promise &#61; Promise.reject(&#39;reject one&#39;);

promise.then(
function(data) {console.log(data); // resolve one
}).catch(function(err) {console.log(err);
});

7、Promise.reject()方法

除了在实例化Promise构造函数内部使用reject之外&#xff0c;我们还可以直接调用reject方法

类似于Promise.resolve()中参数的多样化&#xff0c;且看以下几个栗子&#xff1a;

setTimeout(function () {console.log(&#39;three&#39;);
},
0);Promise.reject().catch(function () {console.log(&#39;two&#39;);
});console.log(
&#39;one&#39;); // one
//
two
//
three

// var promise &#61; Promise.resolve(&#39;resolve one&#39;);
var promise &#61; Promise.reject(&#39;reject one&#39;);promise.then(function(data) {console.log(data);
}).
catch(function(err) {console.log(err); // reject one
});

8、Promise的反模式

关于Promise有很多难点技巧点&#xff0c;比如以下四中调用方式的区别

doSomething().then(function () {return doSomethingElse();
})&#xff1b;doSomethin().then(functiuoin () {doSomethingElse();
});doSomething().then(doSomethingElse());doSomething().then(doSomethingElse);

相关解释见&#xff1a;谈谈使用 promise 时候的一些反模式

转:https://www.cnblogs.com/vickylinj/p/10886909.html



推荐阅读
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • PHP引用的概念和用法详解
    本文详细介绍了PHP中引用的概念和用法。引用是指不同的变量名访问同一个变量内容,类似于Unix文件系统中的hardlink。文章从引用的定义、作用、语法和注意事项等方面进行了解释和示例。同时还介绍了对未定义变量使用引用的情况,以及在函数和new运算符中使用引用的注意事项。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • 文章目录题目:二叉搜索树中的两个节点被错误地交换。基本思想1:中序遍历题目:二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
author-avatar
月光女孩2602906135_166
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有