前端学习开发之【Promise】与【axios】

26 篇文章 1 订阅
订阅专栏

0.补充

1. 实例对象与函数对象

实例对象:new函数产生的对象;
函数对象:把函数作为对象使用;(操作属性或方法)

2. 回调函数

自己定义的,但自己没有调用,依旧会执行。
同步回调
立即执行,完全执行完了才结束。不会放入队列中。
异步回调
放入队列中将来执行。一开始不直接干,启动之后直接往下执行,然后再执行该回调函数。

3. 错误处理

错误类型

  • ReferenceError:引用变量不存在;
  • TypeError:数据类型不正确;(该类型不存在xxx属性或方法)
  • RangeError:超出范围,死循环;
  • SyntaxError:语法错误。

错误处理

  • 捕获错误:try catch 捕获error.message、stack
  • 抛出错误:throw new Error(’ ')

错误对象
message属性:错误相关信息;
stack属性:函数调用栈记录信息。

1.概述

1. 简介

异步编程

  • 文件操作
  • 数据库操作
  • 定时器

实现异步编程: 回调函数

什么是Promise?
Promise是JS中进行异步编程的解决方案,语法上讲就是一个构造函数,功能上讲promise对象用来封装一个异步操作并可以获取其成功或失败的结果值。

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

为什么要用Promise

  1. 指定回调函数,更灵活:启动异步任务—返回promise对象—给promise对象绑定回调函数;以前必须在启动异步任务前就把回调函数准备好;
  2. 支持链式调用,解决回调地狱问题(不断推进,一直嵌套)。
2. Promise状态
  1. pending变resolved
  2. pending 变 rejected
  • Promise只有这两种状态,且一个对象只能改变一次;
  • 无论成功还是失败,都只有一个结果数据;
  • 成功结果为value,失败为reason。

流程
在这里插入图片描述

3. 使用Promise流程

Promise是构造函数,可以实例化对象,接收的参数是函数类型的值,该函数有两个形参,resolve和reject(也是函数类型的数据),成功调用reslove,失败调用reject。

const p=new Promise((resolve,reject)=>{
//执行器函数 执行异步操作任务
//成功则调用resolve(value),将promise对象的状态设置为成功
//失败调用reject(reason),将promise对象的状态设置为失败
})

then方法:
接收两个参数,都是函数类型的值。成功则执行第一个回调函数,失败则执行第二个回调。

p.then(()=>{},()=>{})
4.使用util.pormisify(original)封装

传入一个错误优先的回调函数(即以(err,value)=>{}回调作为最后一个参数),并返回一个promise的版本。
Node.js 内置的 util 模块有一个 promisify() ,该方法将基于回调的函数转换为基于 Promise 的函数。这使您可以将 Promise 链和 async/await 与基于回调的 API 结合使用。

//引入util模块
const util=require('util');
//引入fs模块
const fs=require('fs');
//返回一个新函数
let mineReadFile=util.promisify(fs.readFile);
mineReadFile('./resource/content.txt').then(value=>{});
5.封装AJAX请求
function sendAJAX(url){
	return new Promise((resolve,reject)=>{
	const xhr=new XMLHttpRequest();
	xhr.open("GET",url);
	xhr.send();
	xhr.onreadystatechange=function(){
		if(xhr.readystate===4){
			if(xhr.status>=200&&xhr.status<300)
			{
				resolve(xhr.response);
			}else{
				reject(xhr.status);
			}
		}
	}
}

sendAJAX('http://api')
.then(value=>{},reason=>{})

2.理论

1.Promise状态

实例对象中的一个属性 PromiseState

  • pending 未决定的
  • resolved、fullfilled 成功
  • rejected 失败

一个promise对象只能改变一次,且只有一个数据结果,成功数据为value,失败数据为reason。

2. Promise对象的值

实例对象中的另一个属性 PromiseResult
保存着对象成功或失败的结果。
修改该值的函数:

  • resolve;
  • reject。

然后调用then方法对该值进行相关操作。

3. API

注意看清楚是属于函数对象,还是属于实例对象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
resolve
如果传入参数为非Promise对象,则返回的结果为成功的promise对象;如果传入的参数为promise对象,则参数的结果为resolve的结果。
如果失败,需要用catch捕捉。
在这里插入图片描述
在这里插入图片描述

4.关键问题

如何改变promise状态

  • 调用resolve函数或reject函数;
  • throw ' '抛出错误。

一个promise指定多个回调,都会调用吗

  • 当promise改变为对应状态时都会调用。

改变promise状态与指定回调函数的顺序问题

  • 都有可能,正常情况下先指定回调(then)再改变状态;
  • 如何先改状态再指定回调:在执行器中直接调用resolve或reject;延迟调用then;
  • 什么时候得到数据:先指定回调的话,当状态改变时,回调函数就会调用,得到数据;先改变状态的话,当指定回调时就会调用回调得到数据。

then返回promise对象的结果状态

  • 由then()指定的回调函数执行结果决定;
    在这里插入图片描述
    在这里插入图片描述

异常穿透
前面抛出异常,可以在最后catch,中间可以调用then。
在这里插入图片描述

3.自定义Promise

使用:

let p=new Promise((resolve,reject)=>{
	resolve('ok');
});
p.then(value=>{},reason=>{});

自定义:

  1. 定义整体结构:构造函数含执行器形参(函数类型),在原型链上添加then函数;构造函数中声明reject和resolve函数,并调用执行器,参数为reject和resolve;
  2. 设置reject和resolve函数:先添加属性PromiseState和PromiseResult并设置初始值;再保存实例对象this,然后在两函数中修改变量,(注意函数有形参data为结果值);
  3. throw抛出异常:调用执行器时使用try catch捕获异常,调用reject;
  4. 设置Promise状态只能修改一次:在reject和resolve函数中设置判断,若状态不为pending,则直接返回不进行修改操作;
  5. then方法执行回调:then方法有两个函数类型的形参onResolved和onRejected,当状态为fulfilled时调用前者,(形参为结果值);
  6. 异步任务回调的执行:为了能够在未改变状态时指定回调,需要在then中进行pending判断,增加callback变量,保存onRejected和onResolved两个回调函数;在构造函数的resolve和reject中增加调用回调;
  7. 指定多个回调的实现:callback修改为数组,可以push进多个对象,每个对象包含一个onResolved和一个onRejected;在resolve和reject函数中修改调用每一个回调;
  8. 同步任务修改状态 then方法结果返回:then的返回结果由回调函数的执行结果来决定,修改then函数,返回新建的Promise对象,如果结果是promise,则返回其then调用结果,如果不是promise对象,则调用resolve返回;
  9. 异步任务修改状态then方法结果返回:增加pending判断改为上述;
  10. then方法优化: 封装hen的返回结果由回调函数的执行结果来决定,修改then函数,返回新建的Promise对象,如果结果是promise,则返回其then调用结果,如果不是promise对象,则调用resolve返回
  11. catch方法(异常穿透与值传递):
  12. 封装resolve、reject、all、race函数;
  13. then方法回调函数异步执行:加上定时器;
  14. 封装成class:
function Promise(executor){
	//添加属性
	this.PromiseState='pending';
	this.PromiseResult=null;
	this.callbacks={};
	//保存实例对象的this值
	const self=this;
	function resolve(data){
		if(self.PromiseState !=='pending')return;
		//1.修改对象状态(promiseState)
		self.PromiseState='fulfilled';
		//2.设置对象结果值(promiseResult)
		self.PromiseResult=data;
		setTimeout(()=>{
			self.callbacks.forEach(item=>{
				item.onResolved(data);
			})
		})
	}
	function reject(data){
		if(self.PromiseState !=='pending')return;
		//1.修改对象状态(promiseState)
		self.PromiseState='rejected';
		//2.设置对象结果值(promiseResult)
		self.PromiseResult=data;
		setTimeout(()=>{
			self.callbacks.forEach(item=>{
				item.onRejected(data);
			})
		})
		
	}
	try{
		//同步调用执行器函数
		excutor(resolve,reject);
	}catch(e){
		reject(e);
	}
	
}
//形参为函数
Promise.prototype.then=function(onResolved,onRejected){
	const self=this;
	if(typeof onRejected !=='function'){
		onRejected=reason=>{
			throw reason;
		}
	}
	if(typeof onResolved!=='function'){
		onResolved=value=>value;
	}
	return new Promise((resolve,reject)=>{
		//封装函数
		function callback(type){
			try{
				let result=type(this.PromiseResult);
				if(result istanceof Promise){
					result.then(v=>{
						resolve(v);
					},r=>{
						reject(r);
					})
				}else{
					resolve(result);
				}
			}catch(e){
				reject(e);
			}
		}
		//调用回调函数
		if(this.PromiseState==='fulfilled'){
			setTimeout(()=>{
				callback(onResolved);
			})
		}
		if(this.PromiseState==='rejected'){
			setTimeout(()=>{
				callback(onRejected);
			})
			
		}
		if(this.PromiseState==='pending'){
			//保存回调函数
			this.callbacks.push{
				onResolved:function(){
					callback(onResolved);
				},
				onRejected:function(){
					callback(onRejected);
				}
			}
		}
	})
}
Promise.prototype.catch=function(onRejected){
	return this.then(ondefined,onRejected);
}

Promise.resolve=function(value){
	return new Promise((resolve,reject)=>{
		if(value instanceof Promise){
			value.then(v=>{
				resolve(v)
			},r=>{
				reject(r);
			}
		}else{
			resolve(value);
		}
	}
}
Promise.reject=function(reason){
	return new Promise((resolve,reject)=>{
		reject(reason);
	}
}
Promise.all=function(promises){
	return new Promise((resolve,reject)=>{
		let count=0;
		let arr=[];
		for(let i=0;i<promises.length;i++){
			promises[i].then(v=>{
				count++;
				arr[i]=v;
				if(count===promises.length){
					resolve(arr);
				}
			},r=>{
				reject(r);
			})
		}
	}
}
Promise.race=function(promises){
	return new Promise((resolve,reject)=>{
		for(let i=0;i<promises.length;i++){
			promises[i].then(v=>{
				resolve(v);
			},r=>{
				reject(r);
			})
		}
	}
}
class Promise{
	constructor(executor){
			//添加属性
	this.PromiseState='pending';
	this.PromiseResult=null;
	this.callbacks={};
	//保存实例对象的this值
	const self=this;
	function resolve(data){
		if(self.PromiseState !=='pending')return;
		//1.修改对象状态(promiseState)
		self.PromiseState='fulfilled';
		//2.设置对象结果值(promiseResult)
		self.PromiseResult=data;
		setTimeout(()=>{
			self.callbacks.forEach(item=>{
				item.onResolved(data);
			})
		})
	}
	function reject(data){
		if(self.PromiseState !=='pending')return;
		//1.修改对象状态(promiseState)
		self.PromiseState='rejected';
		//2.设置对象结果值(promiseResult)
		self.PromiseResult=data;
		setTimeout(()=>{
			self.callbacks.forEach(item=>{
				item.onRejected(data);
			})
		})
		
	}
	try{
		//同步调用执行器函数
		excutor(resolve,reject);
	}catch(e){
		reject(e);
	}
	}
	then((onResolved,onRejected){
	const self=this;
	if(typeof onRejected !=='function'){
		onRejected=reason=>{
			throw reason;
		}
	}
	if(typeof onResolved!=='function'){
		onResolved=value=>value;
	}
	return new Promise((resolve,reject)=>{
		//封装函数
		function callback(type){
			try{
				let result=type(this.PromiseResult);
				if(result istanceof Promise){
					result.then(v=>{
						resolve(v);
					},r=>{
						reject(r);
					})
				}else{
					resolve(result);
				}
			}catch(e){
				reject(e);
			}
		}
		//调用回调函数
		if(this.PromiseState==='fulfilled'){
			setTimeout(()=>{
				callback(onResolved);
			})
		}
		if(this.PromiseState==='rejected'){
			setTimeout(()=>{
				callback(onRejected);
			})
			
		}
		if(this.PromiseState==='pending'){
			//保存回调函数
			this.callbacks.push{
				onResolved:function(){
					callback(onResolved);
				},
				onRejected:function(){
					callback(onRejected);
				}
			}
		}
	})
}

	catch(onRejected){
		return this.then(ondefined,onRejected);
	}

	static resolve(value){}
	static reject(reason){}
	static all(promises){}
	static race(promises){}
}

4.async与await

1.async函数
  • 返回值为promise对象;
  • promise对象的结果由async函数执行的返回值决定:如果返回值是一个非promise对象,则结果是成功状态的promise对象,结果值为return值;如果返回的结果是一个promise对象,则返回该对象;如果抛出异常,则返回一个失败的promise对象,结果值为抛出值。
2.await表达式
  • await右侧的表达式一般为promise对象,也可以为其他值;

  • 如果表达式是promise对象,则await返回的是promise成功的结果值;

  • 如果右侧是失败的promise对象,必须进行try catch捕获,得到失败的结果;

  • 如果表达式是其他值,直接将此值作为await的返回值。

  • await必须写在async函数中,但async函数中可以没有await;

  • 如果await的promise失败了,就会抛出异常,需要通过try catch捕获处理。

3. async与await结合实践
  1. 错误处理与回调更方便:直接try catch;
  2. 发送ajax时,直接调用封装好的函数。

5.axios

1.简介

axios是基于promise对ajax的封装。Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

mvvm:
在这里插入图片描述

2.基本使用

默认使用get方式发送无参请求

axios({
	url:'https://api'
}).then(res=>{})

指定get方式发送无参请求

axios({
	url:'https://api'method:'get'
}).then(res=>{})

指定post方式发送无参请求

axios({
	url:'https://api'method:'post'
}).then(res=>{})

get发送有参请求

axios({
	url:'https://api?key=value',
	method:'get'
}).then(res=>{})
axios({
	url:'https://api',
	params:{
		key:'value',
	},
	method:'get'
}).then(res=>{})

post发送有参请求

axios({
	url:'https://api',
	params:{
		key:'value',
	},
	method:'post'
}).then(res=>{})

如果使用data而非params发送,则后台接收到的value为null,因为axios使用post携带参数默认使用application/json。
解决:1.使用params 2.服务器端给请求参数加上@requestBody。

3. axios请求方式

get无参

axios.get('url').then(res=>{}).catch(err=>{})

get有参

axios.get('url',{parmas:{key:'value'}}).then(res=>{}).catch(err=>{})

post无参

axios.post('url').then(res=>{}).catch(err=>{})

post有参

axios.post('url',"key=value&key2=value2").then(res=>{}).catch(err=>{})

使用data传输数据,后台需要将axuios自动转换成java对象,加上@requestBody。
在这里插入图片描述

4.axios并发请求

请求成功响应数组。
可以使用spread函数方法处理响应结果。

axios.all([
	axios.get('url'),
	axios.post('url')])
.then(
	axios.spread((res1,res2)=>{})
).catch(err=>{})
5.全局配置

指定默认配置,它将作用于每个请求。

axios.defaults.baseURL='';
axios.defaults.timeout=2000;
6.实例

封装不同实例,实现不同配置

let newVar=axios.create({
	baseURL:'',
	timeout:5000
});
newVar({
	url:''
}).then(res=>{})
7.拦截器

在发起请求或响应对操作进行处理,被 then 或 catch 处理前拦截它们。约等于过滤器

axios两大类拦截器:请求方向的拦截 响应方向拦截。

// 添加请求拦截器
axios.interceptors.request.use(config=>{
    // 在发送请求之前做些什么
    return config;
  }, error=>{
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(response=>{
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  }, error=>{
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });

移除拦截器:

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);
8.axios在vue中的模块封装
  1. 安装npm install --save
  2. 创建request文件夹存放请求函数;
  3. 封装。

传递参数:

import axios from 'axios';
export function request(config,success,fail){
	axios({
		url:config
	}).then(res=>{success();})
	.catch(err=>{fail();})
}

export function request1(config){
	axios.defaults,baseURL='';
	axios(config).then(res=>{config.success(res);})
	.catch(err=>{config.fail(err);})
	// config={url:'',success:res=>{},fail:err=>{}}
}

promise:

export function request(config){
	return new Promise((resolve,reject)=>{
		let newVar=axios.create({
			baseURL:'',
			timeout:5000
		});
		newVar(config).then(res=>	{resolve(res);}).catch(err=>{reject(err);})
	})
}
//调用
request({url:''}).then(res=>{}).catch(err=>{})

创建实例:

export function request(config){
	let newVar=axios.create({
		baseURL:'',
		timeout:5000
	});
	return newVar(config);
}

request({
	url:''}).then(res=>{})

有能力再进行源码分析

vue+axios+promise实际开发用法详解
10-17
在现代Web开发中,Vue.js已经成为前端开发的主流框架之一,而Axios则是一款广泛使用的HTTP客户端,Promise是JavaScript中用于处理异步操作的一种机制。三者结合使用,可以极大地提升开发效率和用户体验。 Vue.js 是...
PromiseAxios
qq_61643292的博客
09-20 5577
PromiseAxios的详细讲解
Vue总结第七天~Promise网络请求和axios 网络模块
伟庭的博客
12-31 6185
Vue总结第七天~Promise网络请求和axios 网络模块
AJAX Promise axios基本概念和用法
最新发布
hsm666_的博客
09-07 1009
AJAX是异步的JavaScript和XML(Asynchronous JavaScript And XML)。简单地说,就是使用XMLHTTPRequest对象与服务器通信。它可以使用JSON、XML、HTML、text文本等格式发送和接收数据。AJAX最吸引人的就是它的异步特性,也就是说它可以在不重新刷新页面的情况下与服务器通信,交换数据或更新页面Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值。
【基础知识】Promiseaxios通俗理解、示例
lljjhh001的博客
04-16 1252
Ajax、PromiseAxios前端开发中向服务器发送请求、接收响应、处理异常的必备知识,而其中涉及到的构造函数、箭头函数简写、new实例对象等知识点又是javascript基础知识的综合。本文用脑图和示例的方式,帮助大家对以上技术形成初步的认识,用通俗的语言和示例进行阐述,共勉!
axios介绍以及和Promise相结合使用
瓜皮伦的博客
12-04 8146
axios是基于Promise的,因此可以使用Promise API //执行GET请求 import axios from 'axios' axios.default.baseURL = 'http://localhost:3000/api/products' axios.get('/user?ID=12345') //返回的是一个Promise .then(res=>console.log(res)) .catch(err=>console.log(err)); //可配
PromiseAxios使用
qq_42059717的博客
03-03 1220
笔记来源 尚硅谷尚融宝课程
Vue Promiseaxios请求封装详解
10-18
前端开发中,随着前后端分离的流行,数据请求的封装变得尤为重要。Vue Promiseaxios请求封装详解旨在介绍如何利用JavaScript中的Promise对象和axios库来实现优雅和高效的请求封装。本文将详细探讨Promise的使用...
前端插件vue+elementui+axios
03-22
前端开发领域,Vue.js、Element UI 和 Axios 是三个非常重要的工具,它们分别扮演着不同的角色,共同构建出高效、美观且易于维护的用户界面。接下来,我们将详细探讨这三个技术的知识点。 首先,Vue.js 是一个轻...
前端axios请求封装
09-29
前端开发中,数据交互是不可或缺的一环,而...总之,对axios进行封装,创建API模块是前端开发中提高效率和代码质量的重要步骤。它使得接口调用更加规范,降低了维护成本,同时也为团队协作和后期扩展奠定了良好基础。
【Vue框架】Vue2中axios发送请求—安装axios、配置全局域名、传递参数、axios原理之Promise(什么是Promise、使用原因、基本使用、相关API、async与await使用)
量化Mike
04-09 5949
promise支持链式调用,可以解决回调地狱。什么是回调地狱?回调地狱涉及多个异步操作,多个回调函数嵌套使用。例如:有3个异步操作,第2个异步操作是以第1个异步操作的结果为条件的,同理第3个异步操作是以第2个异步操作的结果为条件。
axiospromise
weixin_43204464的博客
08-28 409
promiseaxios知识点,解疑,一看就明白,清晰
如何用promise封装axios方法
Delicia_Lani的博客
06-06 6169
axios:易用、简洁且高效的http库 支持promise:使用Promise管理异步,gaob
学习笔记】AxiosPromise
Eddie_hyh的博客
05-29 1285
AxiosPromise
axiosPromise
Kungirl的博客
08-19 2466
一、axios的介绍 1. 什么是异步? 不会按照浏览器的加载方式 由上到下。 2. 前端哪里面有异步? 1. 回调函数   2. 定时器   3. 事件绑定   4. ajax 3. promise是 es6 为解决异步编程的。 4.axios 是由 promise 封装的一个 http 的库。    ...
vue+axios+promise实际开发用法
kalvin_y_liu的博客
01-29 1481
vue+axios+promise实际开发用法 一、axios的介绍 axios 是由 promise 封装的一个 http 的库。 promise是 es6 为解决异步编程的。 什么是异步? 1. 不会按照浏览器的加载方式 由上到下。 前端哪里面有异步? 1. 回调函数 2. 定时器 3. 事件绑定 4. ajax 二、列举一个例子 针对这个例子 会出现 层层回调函数的嵌套 我们称为(回调地狱) 这样很不好 对我们后期的维护也很麻烦,所以出现了 promise axios它是
Axios 教程:Promise 基础的 HTTP 客户端
gitblog_00649的博客
08-08 740
Axios 教程:Promise 基础的 HTTP 客户端 axiosaxios/axios: Axios 是一个基于Promise的HTTP客户端库,适用于浏览器和Node.js环境,用于在JavaScript应用中执行异步HTTP请求。相较于原生的XMLHttpRequest或Fetch API,Axios提供了更简洁的API和更强大的功能。项目地址:https://gitcode.com/...
「揭秘」promiseaxios封装请求模式
青烟小生的博客
06-09 1684
然而,在真实的项目中,错误处理是必须的。然而,在每个组件和页面中单独处理每一个请求并不是一个好主意,而应该把网络请求的逻辑放到一个统一的地方,这里我们可以将Axios封装成一个JavaScript函数,返回Promise实例。本篇文章介绍了如何在Vue开发环境下使用Promise结合axios来对接口进行封装成方法,并使用async/await来调用封装后的函数来进行同步或异步请求。在上面的代码中,我们将Axios的返回结果进行解构,判断data中的 error_code 是否为0,如果是,则使用。
写文章

热门文章

  • 数字图像处理:图像分割——边缘检测与区域分割 22596
  • 数字图像处理——图像退化(大气湍流模型与运动模糊模型)与图像复原(逆滤波与维纳滤波) 16888
  • 数字图像处理:直方图均衡化、空域滤波、锐化——matlab实现 9584
  • 系统非功能需求(质量属性) 9300
  • CDMA直接序列扩频系统仿真和分析——matlab实现 9186

分类专栏

  • 论文阅读学习 34篇
  • 代码问题 4篇
  • 前端学习 26篇
  • 关于部署与软件操作 6篇
  • 机器学习 6篇
  • 课程学习 19篇
  • 前端小案例 1篇
  • 保研 4篇
  • 力扣题目练习 15篇

最新评论

  • 【论文阅读笔记】SAM-Adapter: Adapting Segment Anything in Underperformed Scenes

    2301_80439815: 最后那句其实就是没绷住

  • 【论文阅读笔记】Faster Segment Anything: Towards Lightweight SAM for Mobile Applications

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • 【论文阅读笔记】ASPS: Augmented Segment Anything Model for Polyp Segmentation

    十分谔谔: 请问为什么通过最小化损失函数,模型将倾向于使c=0

  • 【前端学习笔记】CSS基础三

    Kwan的解忧杂货铺@新空间代码工作室: 博主的文章总是让人受益匪浅,知识的分享太有价值了,期待你继续灌输智慧!博主的文字清晰明了,让我在这个领域更加有信心,真的谢谢你的辛勤付出。

  • 【论文阅读笔记】PraNet: Parallel Reverse Attention Network for Polyp Segmentation

    咔叽布吉: 如果你说的初始特征是编码器提取的特征的话:解码器的每一个模块的最后一步都是上/下采样让尺度匹配,RA模块中有卷积操作让通道数匹配。code中都有,可以看一下

最新文章

  • 【论文阅读笔记】Faster Segment Anything: Towards Lightweight SAM for Mobile Applications
  • 【环境问题】清除僵尸进程 | 深度学习任务中止但是GPU仍在占用
  • 【前端学习笔记】CSS基础三
2024
09月 2篇
08月 2篇
07月 5篇
06月 4篇
05月 4篇
04月 7篇
03月 8篇
02月 2篇
01月 7篇
2023年12篇
2022年60篇
2021年13篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家一家三口玻璃钢雕塑玻璃钢雕塑怎么翻新库存玻璃钢雕塑厂家服务至上合肥春节商场美陈方案南通玻璃钢人物雕塑厂家上海主题商场美陈售价山东周年庆典商场美陈费用佛山玻璃钢卡通猪雕塑商场圣诞节美陈西藏玻璃钢雕塑工厂万源玻璃钢雕塑芜湖百货商场美陈玻璃钢雕塑能放室外么商场开业美陈素材呈贡玻璃钢雕塑定做厂家咨询北京主题商场美陈研发公司手湖玻璃钢雕塑视频宣城大型户外玻璃钢雕塑报价玻璃钢传统人物雕塑公司地址清远美陈玻璃钢动物雕塑黑龙江水果玻璃钢雕塑多少钱仿铜玻璃钢雕塑公司户外玻璃钢卡通雕塑销售价格山东大型商场美陈多少钱走廊商场美陈哪里买艺术玻璃钢雕塑报价多少常州玻璃钢仿铜雕塑批发无锡玻璃钢马雕塑设计广东主题商场美陈厂家供应西安玻璃钢雕塑定做厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化