返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS中promise特点与信任问题解决
  • 367
分享到

JS中promise特点与信任问题解决

2024-04-02 19:04:59 367人浏览 薄情痞子
摘要

目录1.Promise的信任问题1.1信任问题1.2信任问题产生的原因1.2.1调用过早1.2.2调用过晚1.2.3回调未调用1.2.4调用次数过少或过多1.2.5未传递参数、环境值

1.Promise的信任问题

1.1信任问题

请添加图片描述

所谓的信任问题就是你给出事物逻辑,将逻辑处理交给第三方解决

(即回调函数),此时会出现第三方给出的数据结果不是你希望的那样。

比如重复调用,没掉用。下次你在使用它是就会产生信任问题

1.2信任问题产生的原因

1.2.1调用过早

这个问题主要是担心代码是否会引入类似于ZlaGo这样的副作用一种 javascript 开发人员虚构的疯狂恶魔,取名 Zalgo,**用来描述 JavaScript 中同步 / 异步的混乱**即一个任务有时异步操作,有是同步操作,可能会导致竞态条件

Promise解决

promise即使是立刻完成,也无法被立刻调用。根据Promise特性可知道

要想看到结果必须通过==.then调用==

也就是将结果统一成异步操作

1.2.2调用过晚

请添加图片描述

一个同步任务链无法按照上面的形式运行,即在任务链中,下一个任务,不一定

是在上一个任务被完全调度后在运行的。即按照预期有效的延迟另一个回调的发生

Promise解决

只要是通过then注册的回调都会下一个异步时机点发生时依次被调用。

回调中的任何一个都无法影响任何一个或延迟对其他回调的运用

eg:

p.then(function(){
    p.then(function(){
        console.log("c")
    });
    console.log("A")
});
p.then(function(){
    console.log("B")
});

输出结果是**A,B,C**

1.2.3回调未调用

产生原因:回调函数有js语法错误等

Promise解决

可通过p.catch()获取错误信息,因为即使回调函数中有错误,回调函数还是会被调用

可通过下面的方式解决

function timeout(delay){
    return new Promise(function(resolve,reject){
        setTimeout(function(){
            reject('Timeout!')
        },delay)
    })
}
Promise.race([
    foo(),
    timeout(3000)
]).then(
    function(){
        //foo(...)及时完成
    },
    function(err){
        //foo(...)被拒绝,或者没按时完成
    }
)

1.2.4调用次数过少或过多

调用次数过少就是没有调用

Promise解决

Promise只能进行一次决议,所以任何通过then(…)注册的回调都只会调用一次

1.2.5未传递参数、环境值

回调函数不知道处理那些数据,以及改怎么执行

Promise解决

如果你没有用任何值显式决议,默认用undefined代替

#### 1.2.6吞掉错误和异常

回调函数出现错误和异常时在某种情况下,不向外抛出提示

2.Promise的几个关键问题

2.1怎么改变Promise的状态

通过resolve()

resolve('ok');        // pending   => fulfilled (resolved)

通过reject()

reject("error");      // pending  =>  rejected 

2.2Promise 指定多个回调

一个promise对象通过多个==.then()==调用

eg:

let p = new Promise((resolve, reject) => {
            // resolve('OK');
        });

        ///指定回调 - 1
        p.then(value => {
            console.log(value);
        });

        //指定回调 - 2
        p.then(value => {
            alert(value);
        });

结果是可以的

会先出现alert()弹框,后控制台打印

2.3Promise 改变状态与指定回调的顺序问题

都有可能一般先指定回调后改变状态

先改变状态后指定回调的方法如下,也可以通过reject()或resolve()

let p = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("OK");
        }, 2000);
      });

      p.then(
        (value) => {
          console.log(value);
        },
        (reason) => {
          console.log(reason);
        }
      );

请添加图片描述

2.4Promise.then方法的返回结果特点

如果执行then方法返回的是非Promise对象

新promise变为resolved, value为返回的值

let p = new Promise((resolve, reject) => {
            resolve('ok');
        });
let result = p.then(value => {
     console.log(value);
        //返回结果是非 Promise 类型的对象
      return 521;
          });
     }, reason => {
          console.warn(reason);
      });
console.log(result);

请添加图片描述

如果抛出异常, 新 promise 变为 rejected, reason 为抛出的异常

如果返回的是另一个新promise, 此promise的结果就会成为新promise的结果

let p = new Promise((resolve, reject) => {
        resolve("ok");
      });
//执行 then 方法
let result = p.then(
 (value) => {
    console.log(value);
     //3. 返回结果是 Promise 对象
return new Promise((resolve, reject) => {
     resolve('success');
     //reject('error');
  });
 },
 (reason) => {
      console.warn(reason);
     }
   );
 console.log(result);

请添加图片描述

2.5异常穿透

当使用 promise 的 then 链式调用时, 可以在最后指定失败的回调,
前面任何操作出了异常, 都会传到最后失败的回调中处理

let p = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('OK');
                // reject('Err');
            }, 1000);
        });

        p.then(value => {
            // console.log(111);
            throw '失败啦!';
        }).then(value => {
            console.log(222);
        }).then(value => {
            console.log(333);
        }).catch(reason => {
            console.warn(reason);
        });

请添加图片描述

总结:1.深入了解回调函数的一些问题
2.了解Promise怎么解决这些信任问题
3.了解了promise的特点

总结

到此这篇关于JS中promise特点与信任问题解决的文章就介绍到这了,更多相关JS promise信任问题内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JS中promise特点与信任问题解决

本文链接: https://lsjlt.com/news/150707.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS中promise特点与信任问题解决
    目录1.Promise的信任问题1.1信任问题1.2信任问题产生的原因1.2.1调用过早1.2.2调用过晚1.2.3回调未调用1.2.4调用次数过少或过多1.2.5未传递参数、环境值...
    99+
    2024-04-02
  • JS中promise特点与信任问题如何解决
    这篇文章主要介绍了JS中promise特点与信任问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS中promise特点与信任问题如何解决文章都会有所收获,下面我们一起来看看吧。1.Promise的信...
    99+
    2023-07-02
  • 怎么使用JS promise解决异步问题
    这篇“怎么使用JS promise解决异步问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用JS ...
    99+
    2023-07-05
  • JS中浮点数精度问题的分析与解决方法
    目录前言问题的发现浮点数运算后的精度问题toFixed奇葩问题为什么会产生浮点数的存储浮点数的运算解决方法解决toFixed解决浮点数运算精度附:JS浮点数精度问题的一些实用建议总结...
    99+
    2024-04-02
  • 如何解决JS中getElementsByClassName与classList兼容性问题
    这篇文章主要为大家展示了“如何解决JS中getElementsByClassName与classList兼容性问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“...
    99+
    2024-04-02
  • JavsScript中Promise的错误捕获问题怎么解决
    本篇内容介绍了“JavsScript中Promise的错误捕获问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们需要在异步任务中...
    99+
    2023-07-02
  • 如何解决js中this指向问题
    本篇文章给大家分享的是有关如何解决js中this指向问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JS中this指向问题相信我,只要记住本...
    99+
    2024-04-02
  • 如何解决JS中touchstart事件与click事件冲突的问题
    这篇文章主要介绍了如何解决JS中touchstart事件与click事件冲突的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言移动互联...
    99+
    2024-04-02
  • js浮点数精度丢失的问题及解决方法
    本篇内容介绍了“js浮点数精度丢失的问题及解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明在数学计算中,小数会有一定的误差,这是计...
    99+
    2023-06-20
  • koa2中使用async 、await、promise解决异步问题的示例分析
    这篇文章给大家分享的是有关koa2中使用async 、await、promise解决异步问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关键词:async 、awai...
    99+
    2024-04-02
  • js中setInterval多次调用问题怎么解决
    在 JavaScript 中,setInterval 函数可以用来重复执行一个函数或者一段代码。然而,有时候我们可能需要在 setI...
    99+
    2024-02-29
    js
  • JS中怎么解决点击a标签返回页面顶部的问题
    这篇文章给大家分享的是有关JS中怎么解决点击a标签返回页面顶部的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。<!DOCTYPE html> <h...
    99+
    2024-04-02
  • 解决PHP7特性在PHPStorm中的报错问题
    解决PHP7特性在PHPStorm中的报错问题 PHPStorm是一个强大的PHP集成开发环境,但在使用过程中,有时会出现对PHP7特性的报错问题。本文将通过具体的代码示例和解决方法来...
    99+
    2024-04-02
  • 如何解决React中组件通信问题
    这篇文章将为大家详细讲解有关如何解决React中组件通信问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。父子组件父 → 子parent组件传给child组件,符合rea...
    99+
    2024-04-02
  • js中如何解决foreach循环中遇到的问题
    这篇文章给大家分享的是有关js中如何解决foreach循环中遇到的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.列表页面用"foreach循环"的时候...
    99+
    2024-04-02
  • 如何解决JS中变量的声明,举起与初始化的问题
    这篇文章主要讲解了“如何解决JS中变量的声明,举起与初始化的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决JS中变量的声明,举起与初始化的问题”...
    99+
    2024-04-02
  • js百度地图滚轮缩放所在点偏移问题解决
    目录提出问题分析问题解决问题结语提出问题 <!DOCTYPE html> <html> <head>     <meta http-equ...
    99+
    2023-02-14
    js百度地图滚轮缩放 js 百度地图缩放
  • PHP浮点数运算问题分析与解决方案
    PHP是一种广泛应用于网站开发的脚本语言,其强大的功能和灵活性使得它成为许多开发者的首选工具。然而,在处理浮点数运算时,PHP也存在一些问题,特别是在涉及到精度和精确性要求较高的情况下...
    99+
    2024-02-27
    php 运算 浮点数 格式化输出
  • 解决centos7中tomcat启动与本机访问问题
    tomcat的启动 tomcat文件下bin文件夹下的./startup.sh(启动),./shutdown.sh(关闭) tomcat启动后本机进行访问无法打开,是由于centos的防火墙的问题,  关闭c...
    99+
    2022-06-04
    centos7 tomcat
  • 怎么解决php中js加载后的乱码问题
    本篇内容介绍了“怎么解决php中js加载后的乱码问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php中js加载后乱码的解决办法:1、将编...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作