ES6中Promise的基本用法介绍
本篇文章给大家带来的内容是关于ES6中Promise的基本用法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
Promise是一种异步编程的解决方案
1.es5的回调
{ let ajax = function (callback) { console.log('run1'); setTimeout(function () { callback && callback.call(); }, 1000); }; ajax(function () { console.log('timeout1'); }); // 结果:立马输出 run1,1秒之后输出 timeout1 // 1.如果过程变得复杂,a()=>b()=>c()=>d()... ,用回调来处理会使代码变得复杂 // 2.代码复杂影响后期维护,很难一眼看出回调之间的顺序问题,代码难以阅读 }
2.es6的Promise
{ let ajax = function () { console.log('run2'); // 返回一个对象(Promise实例),这个实例具有then()方法,就是执行下一步的功能 return new Promise(function (resolve, reject) { // resolve表示执行下一步操作 reject表示中断当前操作 setTimeout(function () { resolve(); }, 1000); }); }; ajax().then(function () { // 这个方法对应resolve console.log('timeout2'); }, function () { // 这个方法对应reject }); // 结果:立马输出 run2,1秒之后输出 timeout2 // 结果和es5一样,但是代码可读性、可维护性更高 }
3.then()的串联操作
{ let ajax = function () { console.log('run3'); return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, 2000); }); }; ajax().then(function () { // 返回Promise实例,通过不断的下一步下一步,实现了串联操作的结果 return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, 3000); }); }).then(function () { console.log('timeout3'); }); // 结果:立马输出 run3,5秒之后输出 timeout3 }
4.catch方法
{ let ajax = function (num) { console.log('run4'); return new Promise(function (resolve, reject) { if (num >= 5) { resolve(); } else { throw Error(`出错了,${num}小于5`); } }); }; // catch方法用来捕获异常 ajax(6).then(function () { console.log(6); }).catch(function (err) { console.log(err); }); // 结果:输出 run4 6 ajax(3).then(function () { console.log(3); }).catch(function (err) { console.log(err); }); // 结果:输出 run4 Error: 出错了,3小于5 }
Promise.all()
例子:所有图片加载完再统一添加到页面
{ function loadImg(src) { return new Promise((resolve, reject) => { let img = document.createElement('img'); img.src = src; // onload监听图片加载完成 img.onload = function () { resolve(img); }; // onerror监听图片加载失败 img.onerror = function (err) { reject(err); }; }); } function showImgs(imgs) { console.log(imgs); // [img, img, img] 三个img对象 imgs.forEach(function (img) { document.body.appendChild(img); }); } // Promise.all 把多个Promise实例当做一个Promise实例 // Promise.all(array).then(fn),array对应多个Promise实例,当所有实例状态发生改变时,新的Promise实例才会跟着发生变化 // Promise.all也是返回Promise实例,所以也有.then()方法 // 当三张图片都加载完成,才会执行showImgs,如果其中有图片正在加载,不会执行showImgs,页面上看不到任何一张图片 Promise.all([ loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530513100.webp'), loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2529571873.webp'), loadImg('https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.webp') ]).then(showImgs); }
Promise.race()
例子:有一个图片加载完就添加到页面,其余的不管,只显示最先加载完成的一张图片
{ function loadImg(src) { return new Promise((resolve, reject) => { let img = document.createElement('img'); img.src = src; // onload监听图片加载完成 img.onload = function () { resolve(img); }; // onerror监听图片加载失败 img.onerror = function (err) { reject(err); }; }); } function showImgs(img) { let p = document.createElement('p'); p.appendChild(img); document.body.appendChild(p); } // 当某一张图片率先加载完成,执行showImgs显示这张图片,剩余图片不再响应 Promise.race([ loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530513100.webp'), loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2529571873.webp'), loadImg('https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.webp') ]).then(showImgs); }
ican
26
发布于
超级有温度的代码
1 天前发布
【ES6入门12】:Promise
javascript
es6
前端
19 次阅读 · 读完需要 15 分钟
0
Promise基本用法
Promise是一种异步编程的解决方案
1.es5的回调
{ let ajax = function (callback) { console.log('run1'); setTimeout(function () { callback && callback.call(); }, 1000); }; ajax(function () { console.log('timeout1'); }); // 结果:立马输出 run1,1秒之后输出 timeout1 // 1.如果过程变得复杂,a()=>b()=>c()=>d()... ,用回调来处理会使代码变得复杂 // 2.代码复杂影响后期维护,很难一眼看出回调之间的顺序问题,代码难以阅读 }
2.es6的Promise
{ let ajax = function () { console.log('run2'); // 返回一个对象(Promise实例),这个实例具有then()方法,就是执行下一步的功能 return new Promise(function (resolve, reject) { // resolve表示执行下一步操作 reject表示中断当前操作 setTimeout(function () { resolve(); }, 1000); }); }; ajax().then(function () { // 这个方法对应resolve console.log('timeout2'); }, function () { // 这个方法对应reject }); // 结果:立马输出 run2,1秒之后输出 timeout2 // 结果和es5一样,但是代码可读性、可维护性更高 }
3.then()的串联操作
{ let ajax = function () { console.log('run3'); return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, 2000); }); }; ajax().then(function () { // 返回Promise实例,通过不断的下一步下一步,实现了串联操作的结果 return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, 3000); }); }).then(function () { console.log('timeout3'); }); // 结果:立马输出 run3,5秒之后输出 timeout3 }
4.catch方法
{ let ajax = function (num) { console.log('run4'); return new Promise(function (resolve, reject) { if (num >= 5) { resolve(); } else { throw Error(`出错了,${num}小于5`); } }); }; // catch方法用来捕获异常 ajax(6).then(function () { console.log(6); }).catch(function (err) { console.log(err); }); // 结果:输出 run4 6 ajax(3).then(function () { console.log(3); }).catch(function (err) { console.log(err); }); // 结果:输出 run4 Error: 出错了,3小于5 }
Promise.all()
例子:所有图片加载完再统一添加到页面
{ function loadImg(src) { return new Promise((resolve, reject) => { let img = document.createElement('img'); img.src = src; // onload监听图片加载完成 img.onload = function () { resolve(img); }; // onerror监听图片加载失败 img.onerror = function (err) { reject(err); }; }); } function showImgs(imgs) { console.log(imgs); // [img, img, img] 三个img对象 imgs.forEach(function (img) { document.body.appendChild(img); }); } // Promise.all 把多个Promise实例当做一个Promise实例 // Promise.all(array).then(fn),array对应多个Promise实例,当所有实例状态发生改变时,新的Promise实例才会跟着发生变化 // Promise.all也是返回Promise实例,所以也有.then()方法 // 当三张图片都加载完成,才会执行showImgs,如果其中有图片正在加载,不会执行showImgs,页面上看不到任何一张图片 Promise.all([ loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530513100.webp'), loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2529571873.webp'), loadImg('https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.webp') ]).then(showImgs); }
Promise.race()
例子:有一个图片加载完就添加到页面,其余的不管,只显示最先加载完成的一张图片
{ function loadImg(src) { return new Promise((resolve, reject) => { let img = document.createElement('img'); img.src = src; // onload监听图片加载完成 img.onload = function () { resolve(img); }; // onerror监听图片加载失败 img.onerror = function (err) { reject(err); }; }); } function showImgs(img) { let p = document.createElement('p'); p.appendChild(img); document.body.appendChild(p); } // 当某一张图片率先加载完成,执行showImgs显示这张图片,剩余图片不再响应 Promise.race([ loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530513100.webp'), loadImg('https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2529571873.webp'), loadImg('https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.webp') ]).then(showImgs); }
你可能感兴趣的
评论
以上是ES6中Promise的基本用法介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

PHP与Vue:完美搭档的前端开发利器在当今互联网高速发展的时代,前端开发变得愈发重要。随着用户对网站和应用的体验要求越来越高,前端开发人员需要使用更加高效和灵活的工具来创建响应式和交互式的界面。PHP和Vue.js作为前端开发领域的两个重要技术,搭配起来可以称得上是完美的利器。本文将探讨PHP和Vue的结合,以及详细的代码示例,帮助读者更好地理解和应用这两

在前端开发面试中,常见问题涵盖广泛,包括HTML/CSS基础、JavaScript基础、框架和库、项目经验、算法和数据结构、性能优化、跨域请求、前端工程化、设计模式以及新技术和趋势。面试官的问题旨在评估候选人的技术技能、项目经验以及对行业趋势的理解。因此,应试者应充分准备这些方面,以展现自己的能力和专业知识。

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

Django是一个Python编写的web应用框架,它强调快速开发和干净方法。尽管Django是一个web框架,但是要回答Django是前端还是后端这个问题,需要深入理解前后端的概念。前端是指用户直接和交互的界面,后端是指服务器端的程序,他们通过HTTP协议进行数据的交互。在前端和后端分离的情况下,前后端程序可以独立开发,分别实现业务逻辑和交互效果,数据的交

Go语言作为一种快速、高效的编程语言,在后端开发领域广受欢迎。然而,很少有人将Go语言与前端开发联系起来。事实上,使用Go语言进行前端开发不仅可以提高效率,还能为开发者带来全新的视野。本文将探讨使用Go语言进行前端开发的可能性,并提供具体的代码示例,帮助读者更好地了解这一领域。在传统的前端开发中,通常会使用JavaScript、HTML和CSS来构建用户界面

Django:前端和后端开发都能搞定的神奇框架!Django是一个高效、可扩展的Web应用程序框架。它能够支持多种Web开发模式,包括MVC和MTV,可以轻松地开发出高质量的Web应用程序。Django不仅支持后端开发,还能够快速构建出前端的界面,通过模板语言,实现灵活的视图展示。Django把前端开发和后端开发融合成了一种无缝的整合,让开发人员不必专门学习
