Promise的基本使用方法教程

本文主要和大家分享promise的基本使用方法教程,个人理解就是使用同步编程的写法完成异步编程操作。希望能帮助到大家。

const promise = new Promise((resolve, reject) => {    //some asynchronous  code    setTimeout(() => {        console.log('执行完成');        resolve('some data');    }, 2000);});

登录后复制

Promise 接收一个函数作为参数,函数有两个参数,resolve 和 reject 分别表示异步操作执行后成功的回调函数和失败的回调函数。

Promise 实例后马上执行。所以通常采用一个函数包含它

function runAsync() {    return new Promise((resolve, reject) => {        //some asynchronous  code        setTimeout(() => {            console.log('执行完成');            resolve('some data');        }, 2000);    });}runAsync().then((data) => {    console.log(data);//可以使用异步操作中的数据})

登录后复制

runAsync() 执行完调用 then 方法,then() 就相当于我们之前写的回调函数。

resolve 和 reject

function paramTest(){    return new Promise((resolve, reject) => {        let number = Math.ceil(Math.random() * 10);        if (number  {    console.log('resolved');    console.log(number);},(reason) => {    console.log('rejected');    console.log(reason);})

登录后复制

Promise 有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)

paramTest() 例子有两种情况:

当 number

当 number >= 5 时,我们认为是失败情况,将状态从 pending 变为 rejected

所以paramTest() 的执行结果:

fulfilled rejected

resolvedrejectednumberout of range

catch的用法

我们继续调用 paramTest 方法举例

paramTest().then((number) => {    console.log('resolved');    console.log(number);    console.log(data); //data为未定义},(reason) => {    console.log('rejected');    console.log(reason);}).catch((err) => {    console.log(err);})

登录后复制

catch 方法其实就是 .then(null, rejection) 的别名,也是用来处理失败失败的回调函数,但是还有一个作用:当 resolve 回调中如果出现错误了,不会堵塞,会执行 catch 中的回调。

all的用法

const p = Promise.all([p1, p2, p3]);p.then(result => {    console.log(result);})

登录后复制

all 方法接收一个数组参数,数组中每一项返回的都是 Promise 对象,只有当 p1, p2, p3 都执行完才会进入 then 回调。p1, p2, p3 返回的数据会以一个数组的形式传到 then 回调中。

const p1 = new Promise((resolve, reject) => {    setTimeout(() => {        resolve('p1');    }, 1000);}).then(result => result).catch(e => e);const p2 = new Promise((resolve, reject) => {    setTimeout(() => {        resolve('p2');    }, 3000);}).then(result => result).catch(e => e);Promise.all([p1, p2]).then(result => console.log(result)).catch(e => console.log(e));//3秒后输出['p1', 'p2']

登录后复制

race的用法

const p = Promise.race([p1, p2, p3]);p.then(result => {    console.log(result);})

登录后复制

race 的用法与 all 如出一辙,不同的是 all 方法需要参数的每一项都返回成功了才会执行 then;而 race 则是只要参数中的某一项返回成功就执行 then 回调。

以下是 race 的例子,和 all 方法对比,可以看到返回值有很明显的区别。

const p1 = new Promise((resolve, reject) => {    setTimeout(() => {        resolve('p1');    }, 1000);}).then(result => result).catch(e => e);const p2 = new Promise((resolve, reject) => {    setTimeout(() => {        resolve('p2');    }, 3000);}).then(result => result).catch(e => e);Promise.race([p1, p2]).then(result => console.log(result)).catch(e => console.log(e));//1秒后输出 'p1'

登录后复制

点击这里查看本文中实例源代码

resloader是基于Promise实现的一个图片预加载并展示加载进度的插件,猛戳这里了解详情。如果感觉还可以的话,欢迎star

相关推荐:

使用Promise简化回调

微信小程序Promise简化回调实例分享

jQuery的Promise如何正确使用

以上就是Promise的基本使用方法教程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2785560.html

(0)
上一篇 2025年3月8日 17:28:57
下一篇 2025年3月8日 17:29:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js如何写插件教程分享

    本文主要和大家分享js如何写插件教程分享,希望能帮助到大家。 nbsp;html>        Document     #demo-1, #demo-2 { width: 200px; height: 200px; border:…

    编程技术 2025年3月8日
    200
  • layui上传组件使用方法分享

    本文主要和大家分享layui上传组件使用方法,先贴上前端的代码,希望能帮助到大家。 产品特性Form @*table { height: 150px; } .layui-form-label { width: 100px; }*@ 选择多文…

    编程技术 2025年3月8日
    200
  • JsChart组件使用方法简介

    jschart是什么?jschart能够在网页上生成图标,常用于统计信息,十分好用的一个js组件。 使用JsChart 一。导入jscharts.js  二。编写jscharts.jsp测试页面 1.下载JScharts库 从官网下载JSc…

    编程技术 2025年3月8日
    200
  • ckeditor自定义插件使用方法解析

    ckeditor即大名鼎鼎的fckeditor,该公司的另一个产品为ckfinder(一个ajax文件管理器)。ckeditor是一款功能强大的富文本编辑工具,这篇文章主要为大家详细介绍了ckeditor自定义插件的使用方法,具有一定的参考…

    2025年3月8日
    200
  • js中Promise对象实例详解

    假设我现在有个实名验证页面,需要验证身份证号码和真实姓名,实名认证是到公安部系统验证(假设在前端验证),验证通过后我再将当前表单信息保存到提交到我自己后台保存; 方法一 不用promise //外层ajax,校验实名信息$.ajax({  …

    编程技术 2025年3月8日
    200
  • js中字符串使用方法分享

    本文主要和大家分享js中字符串使用方法,文中运用了多个例子,希望能帮助到大家。 1.提取字符串substring() substring() 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substrin…

    编程技术 2025年3月8日
    200
  • clipboard.js基本使用方法分享

    clipboard.js 是一个不需要flash,将文本复制到剪贴板的插件。本文主要和大家介绍clipboard.js基本使用方法,希望能帮助到大家。 1 引入插件 登录后复制 2基本使用 首先需要您需要通过传递DOM选择器,HTML元素或…

    编程技术 2025年3月8日
    200
  • Angularjs的promise对象详解

    这次给大家带来angularjs的promise对象详解,使用angularjs的promise对象时注意事项有哪些,下面就是实战案例,一起来看一下。 promise是什么?要了解它,需要先从我们面临的问题开始讲起。在操作ajax异步请求时…

    编程技术 2025年3月8日
    200
  • Angular的新手教程

    这次给大家带来angular的新手教程,angular新手教程的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是UI 对于一个用户界面,它实际上包括三个主要部分: 内容:你想展现哪些信息?包括动态信息和静态信息。注意,这里的内容不包…

    2025年3月8日
    200
  • js中的sort()使用方法

    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。 array.sort()方法默认是升序排序,如果想按照…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论