首页 > 编程语言 >Javascript(笔记52) - promise - 2 API和方法

Javascript(笔记52) - promise - 2 API和方法

时间:2022-11-26 14:34:15浏览次数:38  
标签:resolve 对象 失败 Javascript 52 API Promise reject let

Promise 构造函数

Promise(excutor){}

1)executor 函数:执行器 (resolve,reject)=>{}

2)resolve 函数:内部定义成功时我们调用的函数 value =>{}

3)reject函数:内定定义失败时我们调用的函数 reason =>{}

说明: executor 会在 Promise 内部立即同步调用,异步操作在执行器中执行;

let p = new Promise((fulfill,reject)=>{
// 函数内部的代码是同步调用
console.log(1111);
});
console.log(222);

Javascript(笔记52) - promise - 2 API和方法_promise

执行结果还是先“111”后“222”,说明函数体里的代码是立即执行的,同步调用

Promise.prototype.then 方法

then(onResolved,onRejected)=>{}

1)onResolved 函数:成功的回调函数 (value)=>{}

2)onRejected 函数:失败的回调函数 (reason)=>{}

说明:指定用于得到成功 value 的成功回调和用于得到失败 reason 的失败回调返回一个新的 promise 对象;


Promise.prototype.catch 方法

1) onReject 函数:失败的回调函数 (reason)=>{}

let p = new Promise((fulfill, reject) => {
// 修改下对象状态为失败
reject('error');
});
p.catch(reason=>{
console.log(reason);
});

Javascript(笔记52) - promise - 2 API和方法_promise_02

catch() 只能执行失败状态的函数;


Promise.resolve 

方法:(value)=>{}

1)value: 成功的数据或 promise 对象;

返回一个成功或失败的 Promise 对象;

这是一个 Promise 对象本身的方法,并不是实例化对象的方法;

let p = Promise.resolve(521);
console.log(p);

Javascript(笔记52) - promise - 2 API和方法_javascript_03

结果是一个 Promise 对象,状态为 fulfilled 成功,值为 521;

注意:调用的时候并没有使用 new ;

说明:

1)如果传入的参数是非 Promise 类型的对象,则返回的结果都为成功的 promise 对象;

上例已经说明;

2)如果传的的参数是 Promise 对象,则参数的结果决定了 resolve 的结果;

let p = Promise.resolve(new Promise((fulfill,reject)=>{
fulfill('Ok');
}));
console.log(p);

Javascript(笔记52) - promise - 2 API和方法_javascript_04

受参数 Promise 对象状态的影响,参数对象返回的是 fulfilled 状态,那么 p 对象的状态即为成功;

同理,参数对象返回的是 rejected 状态,那么 p 对象的状态即为失败;

let p = Promise.resolve(new Promise((fulfill,reject)=>{
reject('Error');
}));
console.log(p);

Javascript(笔记52) - promise - 2 API和方法_javascript_05

注意:这里有个报错,原因是我们还没有对这个失败的结果做处理;加一个 catch 方法来处理失败

let p = Promise.resolve(new Promise((fulfill,reject)=>{
reject('Error');
}));
console.log(p);
p.catch(reason=>{
console.log(reason);
});

Javascript(笔记52) - promise - 2 API和方法_promise_06


Promise.reject

 方法:(reason)=>{}

1) reason:失败的原因

说明:作用是返回状态为失败的 Promise 对象;

跟 Promise.resolve 一样,是 Promise 函数自身的方法,并不是实例对象的方法,调用的时候不用 new;

let p1 = Promise.reject(521);
let p2 = Promise.reject('nice to meet you');
let p3 = Promise.reject(new Promise((fulfill,reject)=>{
fulfill('OK');
}));
console.log(p1);
console.log(p2);
console.log(p3);

Javascript(笔记52) - promise - 2 API和方法_promise_07

一下建三个 Promise 对象: p1,p2,p3 。而且3个都报了错;

从结果看,使用 Promise.reject 方法,传入的是 数值、字符串还是 Promise 对象,返回结果的状态都是 rejected 失败的;传入Promise对象后,结果的值还是个 Promise 对象,这点跟 Promise.resolve 不一样,那是因为失败的Promise 对象后必须要跟一个处理失败的方法才行。 如 then() 或 catch();


Promise.all

方法: (promises)=>{}

1)promises:包含 n 个 promise 的数组;

说明:返回一个新的 promise ,只有所有的 promise 都成功才成功,只要有一个失败了就直接失败;

成功的结果是每一个 Promise 对象成功结果的数组 ,失败的结果只是 失败的那个 Promise 对象失败的结果;

let p1 = new Promise((resolve,reject)=>{
resolve("Ok");
});
let p2 = Promise.resolve('Success');
let p3 = Promise.resolve('Oh Yeah');
const result = Promise.all([p1,p2,p3]);
console.log(result);

Javascript(笔记52) - promise - 2 API和方法_promise_08

只有当前三个 Promise 对象的状态都是成功,那么返回的才是状态为成功的 Promise 对象(result),而且成功的结果值,是这 3 个Promise对象的结果组成的数组;

但凡有一个失败的:那返回的状态就是失败,结果值就是状态为失败的值;

let p1 = new Promise((resolve,reject)=>{
resolve("Ok");
});
let p2 = Promise.reject('Error'); // 弄个失败的
let p3 = Promise.resolve('Oh Yeah');
const result = Promise.all([p1,p2,p3]);
console.log(result);

Javascript(笔记52) - promise - 2 API和方法_promise_09

这里,p2 对象是失败的,那么不论 p3 是什么,都会返回失败状态和失败的值;报错是需要在后面接个处理失败的方法;


Promise.race

方法: (promises)=>{}

1) promise: 包含 n 个 promise 的数组;

说明:返回一个新的 Promise 对象,第一个完成的 Promise 的结果状态就是最终的结果状态;

let p1 = new Promise((resolve, reject) => {
resolve("Ok");
});
let p2 = Promise.resolve('Success');
let p3 = Promise.resolve('Oh Yeah');
const result = Promise.race([p1, p2, p3]);
console.log(result);

Javascript(笔记52) - promise - 2 API和方法_promise_10

当前代码中,p1 先改变状态,所以结果由 p1 决定,结果即为成功,返回的值也是 p1 的值;

改一下代码,把 p1 加上异步任务,并把 p2 改为失败的 Promise 对象;

let p1 = new Promise((resolve, reject) => {
setTimeout(()=>{
resolve("Ok");
},1000);
});
let p2 = Promise.reject('Error');
let p3 = Promise.resolve('Oh Yeah');
const result = Promise.race([p1, p2, p3]);
console.log(result);

Javascript(笔记52) - promise - 2 API和方法_javascript_11

这样一来,返回的对象状态就变为 p2 的失败状态,返回值也是 p2 的值;

虽然说不上有啥用,感觉挺有用;


标签:resolve,对象,失败,Javascript,52,API,Promise,reject,let
From: https://blog.51cto.com/ahuiok/5888919

相关文章

  • 一本通 1521: 矿场搭建
    给一个无向图,选择一些点,使得任意去掉一个点后,任一点都可以连接到至少一个选择的点 #include<bits/stdc++.h>usingnamespacestd;constintN=502;vector<int>......
  • js文件模块化引用问题(JavaScript modules)
    有个前端项目,需要用到配置文件。这个配置文件实在是太大了,就想拆成多个小的,然后一一引入,组合成一个完整的配置文件。如果是vue代码,这种情况根本是手到擒来,不费吹灰之力,而该......
  • 1529_AURIX_TriCore内核架构之编程模型
    全部学习汇总:​​GreyZhang/g_tricore_architecture:somelearningnoteabouttricorearchitecture.(github.com)​​继续看一下内核编程模型,看看是否能够对于所有芯片......
  • BurpSuite 插件开发-Montoya Api
    BurpSuite插件开发-MontoyaApi今年十月份,PortSwigger发布了新版本的BurpSuite,其中包含了新版本的Montoya插件API,并宣布会逐步放弃支持旧版插件,艹我也是醉了,github......
  • BurpSuite 插件开发-Montoya Api
    BurpSuite插件开发-MontoyaApi今年十月份,PortSwigger发布了新版本的BurpSuite,其中包含了新版本的Montoya插件API,并宣布会逐步放弃支持旧版插件,艹我也是醉了,github......
  • JavaScript 读写剪切板
    浏览器环境下,JavaScript读写剪切板读取剪切板varp=navigator.clipboard.readText();p.then(function(clipText){console.log(clipText);//剪贴板内容});......
  • 为什么要使用Java Stream API?
    Stream是Java8提供的一种更加简便的,对集合类型数据结构的处理API。这里的集合类型数据结构包括各种数组(int[]/String[]等),也包括Collection和Map等实现类。1传统方式操作......
  • 高德地图JS API示例标记点 拿来即用
    使用最新高德JSAPI2.0先看效果在官方示例基础上做了些改动很多控件在初始化添加即可:如小窗口,指南针等,根据自己的需要加吧html代码<!doctypehtml><html><head>......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......
  • P3627 [APIO2009] 抢掠计划
    从起点S到终点T,求一条路线获得最多的收益(每个点收益a[i]),可以重复通过路和点 裸题#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+2;int......