自我简单认知Promise

Promise用法

一个函数参数:new Promise(function(resolve, reject))
每个Promise构造函数可接受一个参数,参数为一个函数,函数又有两个参数resolve和reject,分别表示为成功之后的回调函数和失败之后的回调函数。

const promise = new Promise ((resolve, rereject) => {
  if (/* 异步操作成功 */){
    return resolve(value);
  } else {
    return reject(error);
  }
})
promise.then((value) => {
  // success
}, (error) => {
  // failure
});

ES6将某一件可能发生异步操作的事情, 分成两个阶段: unsettled和settled
在这里插入图片描述

  • unsettled: 未决阶段, 表示事情还在进行前期的处理, 并没有发生通向结果的那件事
  • settled: 已决阶段, 事情已经有了一个结果, 不管这个结果是好是坏, 整件事情无法逆转。

当异步操作执行成功后,会将异步操作结果作为参数传入 resolve 函数并执行,此时 Promise对象状态从 pending 变为 fulfilled ;
失败就会将异步操作的错误作为参数传入 reject 函数并执行,此时 Promise对象状态从pending 变为 rejected

两个状态转换:pending>fulfilled, pending>rejected
从两种状态转换可以看出有三种状态,挂起状态pending,成功状态fulfilled,失败状态rejected。状态改变后就不会再被改变。

三个原型方法:.then(), .catch(), .finally()

  • then: 创建一个后续处理函数, 当Promise为resolved状态时运行该函数.
  • finally: 创建一个后续处理参数(无参),当Promise为settled时运行该函数。
  • catch: 创建一个后续处理函数,当Promise为rejected状态时运行该函数。
const promise = new Promise((resolve, reject) => {
    resolve(1);
})
const promise2 = promise.then(res => res * 2);
promise2.then(res => {
    console.log(res);
})
const promise = Promise((resolve, reject) => {
    resolve();
})

promise.finally(() => {
    console.log('helloworld');
})


.finally()方法,无论结局如何都会执行的回调函数。

    const proms = [];
    for(let i = 0; i < 10; i ++) {
        proms.push(new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(i);
            }, 3000)
        }))
    }
    Promise.all(proms).then(res => {
        console.log('全部请求完成',res);
    }).catch(err => {
        console.log(err);
    })

四个普通方法:.all(iterable), .race(iterable), .resolve(value), .reject(value)

  • .all()方法iterable参数必须是一个可迭代对象。等所有传入的参数状态由pending>fulfilled时,执行状态为resolve的回调函数.并且then() 方法的第一个函数参数。如果iterable中有一个状态变为rejected状态,会立马执行reject的回调函数。
  • .race()方法iterable参数必须是一个可迭代对象。第一个状态由pending>rejected或pending>fulfilled时触发,触发对应的resolve或reject函数,剩下的可迭代项继续执行,但执行结束后不会执行对应状态的回调函数。
  • .resolve()方法,用于返回一个状态为成功(fulfilled)状态的Promise对象。
  • .rejecct()方法,用于返回一个状态为失败(rejected)状态的Promise对象。
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)内容概要:本文介绍了一种基于神经网络的数据驱动迭代学习控制(ILC)算法,用于解决具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车路径跟踪问题,并提供了完整的Matlab代码实现。该方法无需精确系统模型,通过数据驱动方式结合神经网络逼近系统动态,利用迭代学习机制不断提升控制性能,从而实现高精度的路径跟踪控制。文档还列举了大量相关科研方向和技术应用案例,涵盖智能优化算法、机器学习、路径规划、电力系统等多个领域,展示了该技术在科研仿真中的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及从事无人车控制、智能算法开发的工程技术人员。; 使用场景及目标:①应用于无人车在重复任务下的高精度路径跟踪控制;②为缺乏精确数学模型的非线性系统提供有效的控制策略设计思路;③作为科研复现与算法验证的学习资源,推动数据驱动控制方法的研究与应用。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注神经网络与ILC的结合机制,并尝试在不同仿真环境中进行参数调优与性能对比,以掌握数据驱动控制的核心思想与工程应用技巧。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值