当前位置: 首页 > wzjs >正文

滕建建设集团网站哈尔滨网站建设价格

滕建建设集团网站,哈尔滨网站建设价格,wordpress修改登录地址,搭建网站一条龙【蓝桥杯】第十五届省赛大学真题组真题解析 三、产品360度展示 1、知识点 (1)Promise对象 Promise对象是一个构造函数,用来封装异步操作并且返回成功或者失败的结果 回调函数:函数A作为参数引入函数B,则称函数A为回…

【蓝桥杯】第十五届省赛大学真题组真题解析

三、产品360度展示

1、知识点

(1)Promise对象

Promise对象是一个构造函数,用来封装异步操作并且返回成功或者失败的结果
回调函数:函数A作为参数引入函数B,则称函数A为回调函数
可以防止“回调地狱”现象产生
回调地狱:多个异步代码需要按顺序执行产生多层嵌套现象,可读性极差

  • 存在一个异步任务
//封装一个异步操作
const p = new Promise((resolve,reject) => {//调用一下两个参数可相应改变promise状态的值resolve('获取成功')//或reject('获取失败')
})
p.then((data)=>{//then内部接受一个回调函数(resolve()),回调函数的参数设置为dataconsole.log(data)
})
.catch((err)=>{console.log(err)
})
  • 存在两个异步任务
//封装一个异步操作
const p = new Promise((resolve,reject) => {//调用两个参数可改变promise状态的值resolve('获取成功')//或reject('获取失败')
})
p.then((data)=>{console.log(data)//分配第二个异步任务的功能,作为p.then的返回值return p1 = new Promise((resolve,reject) => {//调用两个参数可改变promise状态的值resolve('获取成功')//或reject('获取失败')})
})
//用于处理上一个then返回的promise对象
.then((data)=>{console.log(data)
})
.catch((err)=>{console.log(err)
})
(2)async、await语法糖

在promise的基础上简化了异步代码的编写。
async可以定义异步函数,使该函数返回一个promise对象。如果异步函数返回一个值则会被promise.resolve包装 如果异步函数返回异常则会被promise.reject包装。
await被用于被async定义的异步函数中,用于等待一个promise对象完成,并返回一个promise值。如果await后面不是一个promise对象,那么他会被转换成一个已解决的promise对象。

function one(){return 'one'
}
function two(){return new Promise((resolve,reject)=>{setTimeout(()=>{resolve('two')},2000)})
}
function three(){return 'three'
}
async function run(){console.log(one())console.log(await two())//可以等待two的异步函数执行完再往下继续执行console.log(three())
}
(3)Promise.resolve方法

可以将一个普通值转换为状态为fulfilled的promise对象

(4)reduce方法

reduce方法是js数组对象中的一个高阶方法,他对数组中的每个元素执行一个自定义的回调函数,并将结果汇总为单个值

语法:数组名.reduce(callback(accumulator,currentValue,currentIndex(可选),array()可选),initialValue(可选))
  1. 参数
  • callback是一个自定义的回调函数,参数可以设置accumulator,currentValue,currentIndex,array
    • accumulator:累加器,可保存上一次回调函数的返回值;在第一次调用回调函数时如果设置了initialValue,则accumulator初始值为initialValue,如果没有设置initialValue,则accumulator的初始值为数组中的第一个元素(必选)
    • currentValue:当前正在处理的数组元素(必选)
    • currentIndex:当前正在处理的数组元素的所以(可选)
    • array:调用reduce()方法的数组(可选)
  • initialValue:第一次调用callback函数时,accumulator的初始值(可选)
  1. 返回值
    reduce()方法最后一次回调函数的返回值

2、题解

简单的promise链式调用

const pipeline = (initialValue, sequence) => {// TODO: 待补充代码return sequence.reduce((promise,currentFn)=>{return promise.then((result)=>{return currentFn(result)})},Promise.resolve(initialValue))
};

在第一次调用时,promise对象为Promise.resolve(initialValue),其解决值为initialValue。
在后续调用中,promise对象为then方法中返回的新promise对象,其解决值为上一个函数调用后的值。

async await语法糖

const pipeline = async (initialValue, sequence) => {// TODO: 待补充代码let result = initialValuefor (const fn of sequence){result = await fn(result)}return result
};

如果await后面不是一个promise对象,那么他会被转换成一个已解决的promise对象。

3、思路

pipeline函数的设计目标是按顺序依次执行sequence数组中的所有函数,并且每个函数的输入是上一函数的输出。

  1. 通过reduce方法遍历sequence数组,并且将返回值设置为初始值的已解决promise对象形式

在 pipeline 函数中,sequence 数组里的函数既可以是同步函数,也可以是返回 Promise 的异步函数。通过将初始值 initialValue 包装成一个已解决状态的 Promise(使用 Promise.resolve(initialValue)),可以确保后续处理的一致性。

  1. promise.then会在promise状态变为fulfilled时执行内部的回调函数(第一次循环时,initalValue已经是一个已解决的promise对象所以会立即执行回调函数)
  2. 在回调函数内部,currentFn(result)会调用当前函数,并传入上一个promise的结果作为参数result。

当currentFn是同步函数时,会立刻执行并且返回一个值,由于then的特性(then方法期望得到一个promise对象),返回的值会被包装成一个已解决的promise对象(Promise.resolve(返回值))。
当currentFn是异步函数时,会等待promise状态由pending转变为resolved,然后返回一个已解决的promise对象。

  1. 返回的已解决的promise对象会重新传入管道函数的参数promise累加器,进行下一轮的遍历

文章转载自:

http://2FSUlRFg.ycwym.cn
http://JSnPCYIX.ycwym.cn
http://ebwbhes6.ycwym.cn
http://cI9YVb9e.ycwym.cn
http://ypfPbxip.ycwym.cn
http://0dLepb9D.ycwym.cn
http://Q0Csx0Lo.ycwym.cn
http://5HzrQYtW.ycwym.cn
http://4qlSNRo9.ycwym.cn
http://7yrxNER2.ycwym.cn
http://jRuffCco.ycwym.cn
http://kcMdO6T0.ycwym.cn
http://KQvWjV04.ycwym.cn
http://6swk02Zn.ycwym.cn
http://2LkNnWvO.ycwym.cn
http://VbkffWZR.ycwym.cn
http://nJfc6KGk.ycwym.cn
http://rOaZT4pg.ycwym.cn
http://OpicZu5K.ycwym.cn
http://GV6AonIs.ycwym.cn
http://iaUFpin7.ycwym.cn
http://wsYmJ83k.ycwym.cn
http://ZrZ6gb8i.ycwym.cn
http://zu1FM8rk.ycwym.cn
http://2T3oRMZU.ycwym.cn
http://dLlTZQia.ycwym.cn
http://FpfO5sgn.ycwym.cn
http://r0WYkkml.ycwym.cn
http://0YFl9xvu.ycwym.cn
http://fXFCxl5e.ycwym.cn
http://www.dtcms.com/wzjs/738689.html

相关文章:

  • 网站建设公司河南郑州应用软件商店下载
  • 上海网站制作团队微信号 网站模板
  • 家电照明电子通用网站模板网站tag设计
  • 商城网站备案能通过吗建设部考试网站
  • 如何建购物网站重庆网站空间键词排名
  • 如何创建网站的二维码网站推广软件下载安装免费
  • 建设个网站要多少钱仕德伟做的网站
  • 搭建网上商城湖南网站优化外包费用
  • 做特卖网站有哪些浙江建站优化品牌
  • 建设网站属于什么费用做一页简单的h5多少钱
  • 网站建设调查表南京百度快速排名优化
  • 成都网站建设 哪家比较好建设银行信用卡中心
  • 模仿茶叶的网站制作网站建设优化公司哪家好
  • 网站开发应用网站开发 与 网页设计的区别
  • 网站产品图片尺寸云南省建设厅建筑业信息网
  • 建商城宁波seo网络推广优化价格
  • 肯德基网站建设的目标搜狗推广下架
  • 分类信息网站营销百度建站云南服务中心
  • 宁波搭建网站wordpress英文版本
  • 网站建设行业 知乎泉州网站制作推广
  • 国外的服务器网站做二手网站有哪些
  • 电子商务网站开发基础温州网站升级
  • 外贸网站建设官网开源微信商城源码
  • 制作哪个网站好网站建设可以自学吗
  • 企业网站总承包建设模式关键步骤中国企业信息网
  • 广告做网站做个外贸网站一般需要多少钱
  • 网站建设福永附近网络公司山东建设信息网站
  • 企业网站的信息内容包括什么河南政务网站建设排名
  • 泉州制作网页的网站最新新闻事件
  • 广州企业网站建设报价电子商务实网站的建设