Promi基本使用及方法介绍

更新时间:2023-07-21 10:16:42 阅读: 评论:0

Promi基本使用及方法介绍
Promi是异步编程的一种解决方案,用于一个异步操作的最终完成(或失败)及其结果值的表示,比传统的回调函数方案更加合理。
描述
1.Promi 对象是一个代理对象(代理一个值),被代理的值在Promi对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。
2.一个 Promi有以下几种状态:(1) pending小学四年级英语下册: 意味着操作正在进行。(2) fulfilled: 意味着操作成功。(3) rejected: 意味着操作失败。
3.pending 状态的 Promi 对象可能触发fulfilled 状态并传递一个值给相应的状态处理方法,也可能触发失败状态(rejected)并传递失败信息。当其中任一种情况出现时,Promi 对象的thenptf 方法绑定的处理方法(handlers )就会被调用(then方法包含两个参数:onfulfilledonrejected(可选参数),它们都是 Function 类型。
语法
var promi = new Promi((resolve, reject) => {/* executor函数 */
    // ... some code
    if (/* 异步操作成功 */){sophie hunter
        resolve(value);
    } el {
        reject(error);
    }coleman
});
promi.then((value) => {
    //success
}, (error) => {
    //failure
})
1.参数executor 函数在Promi构造函数执行时同步执行,被传递 resolvereject 函数(executor函数在Promi构造函数返回新建对象前被调用)。executor 内部通常会执行一些异步操作,一旦完成,可以调用resolve函数来将promi状态改成fulfilled(完成),或者将promi的状态改为rejected(失败)。如果在executor函数中抛出一个错误,那么该promi 状态为rejectedexecutor函数的返回值被忽略。
2.简单使用
function timeout(ms) {
    return new Promi((resolve, reject) => {
        tTimeout(resolve, ms, 'done');
    });
}
timeout(2000).then((value) => {
    console.log(value); //done
});
细节
1.Promi对象在创建后立即执行,then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行。
let promi = new Promi((resolve, reject) => {
    console.log('Promi1');
    resolve();
    console.log('Promi2')
});
promi.then(() => {
    console.log('resolved.');
});
console.log('Hi!');
// Promi1
// Promi2
// Hi!
// resolved
2.如果调用resolve函数和reject函数时带有参数,那么它们的参数会被传递给回调函数。reject函数的参数通常是Error对象的实例,表示抛出的错误;resolve函数的参数除了正常
的值以外,还可能是另一个Promi 实例。
var p1 = new Promi((resolve, reject) => {
    tTimeout(() => reject(new Error('fail')), 3000)
})
tokyovar p2 = new Promi((resolve, reject) => {
    tTimeout(() => resolve(p1), 1000)
})
p2
    .then(result => console.log(result))
    .catch(error => console.log(error))// Error: fail 
如果p2resolve方法将p1badminton怎么读作为参数,p1的状态决定了p2的状态。如果p1的状态是pending,那么p2的回调函数就会等待p1的状态改变;如果p1的状态已经是resolved或者rejected专业用英语怎么说英语词根表,那么p2的回调函数将会立刻执行。由于p2返回的是另一个 Promi,导致p2自己的状态无效了,由p1的状态决定p2的状态。注意:resolve函数传递不同参数生成Promi对象的不同情况可以参考solve的用法。reject函数传递不同参数生成Promi对象的不同情况可以参考ject的用法。
var p1 = solve(value);
// 等价于
var p1 = new Promi(resolve => resolve(value));
var p2 = ject('err');
// 等同于
goldfishvar p2 = new Promi((resolve, reject) => reject('err'));
原型方法
Promi.prototype.then(onFulfilled, onRejected)
1.语法p.then(onFulfilled, onRejected);p.then((value) => {// fulfillment}, (reason) => {// rejection});
2.含义为 Promi实例添加状态改变时的回调函数。then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。
3.链式操作then方法返回的是一个新的promi,因此可以采用链式写法,即then方法后面再调用另一个then方法。
new Promi(resolve => {
    resolve(1);
})
    .then(result => console.log(result)) //1
    .then(result => {
        console.log(result);              //undefined
        return 2;
    })
    .then(result => {
        console.log(result);            //2
        throw new Error("err");
    })
    .then((result) =>{
        console.log(result);           
    }, (err)=>{
        console.log(err);                //Error: err
        return 3;
made in deguo    })
    .then((result) => {
        console.log(result);            //3
    })
注意:①不管是then方法的onfulfilled函数参数执行还是onrejected(可选参数)函数参数执行,then方法返回的都是一个新的Promi对象,都可以继续采用链式写法调用另一个then方法。②Promi.prototype.catch()方法返回的也是一个Promi对象。then方法和catch方法可以链式操作。
4.返回值then方法返回一个Promi,而它的行为与then中的被调用的回调函数(onfulfilled函数/onrejected函数)的返回值有关。(1) 如果then中的回调函数返回一个值,那么then
回的Promi将会成为接受状态,并且将返回的值作为接受状态的回调函数的参数值。

本文发布于:2023-07-21 10:16:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1108734.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   状态   方法   回调   对象   操作   参数   执行
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图