Promise网络异步请求

Promise异步编程

概述

是异步编程的一种解决方案。

从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

状态

Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。

使用场景

Promise是异步编程的一种解决方案。
那什么时候我们会来处理异步事件呢?

这种方案在网络请求中很常见
一种很常见的场景应该就是网络请求了。通常在这种场景中,因为不能立即拿到结果,所以往往我们会传入另外一个函数,在数据请求成功时,将数据通过传入的函数回调出去。
如果只是一个简单的网络请求,那么这种方案不会给我们带来很大的麻烦。

基本语法

const p1 = new Promise(function(resolve,reject){

resolve(‘success1’);

resolve(‘success2’); });

const p2 = new Promise(function(resolve,reject){

resolve(‘success3’);

reject(‘reject’); });

p1.then(function(value){ console.log(value); // success1 });

p2.then(function(value){ console.log(value); // success3 });

原始的异步请求思路

// setTimeout(()=>{
// console.log(“first”);
// setTimeout(()=>{
// console.log(“second”);
// setTimeout(() => {
// console.log(“third”);
// }, 1000);
// },1000)
// },1000)

基于promise的异步请求思路

// new Promise((resolve,reject)=>{
// setTimeout(()=>{
// resolve(“first”);
// resolve()
// },1000)
// }).then((res)=>{
// console.log(res);
// new Promise((resolve,reject)=>{
// setTimeout(()=>{
// resolve(“second”);
// },1000)
// }).then((res)=>{
// console.log(res)
// new Promise((resolve,reject)=>{
// setTimeout(()=>{
// resolve(“third”);
// },1000)
// }).then((res)=>{
// console.log(res);
// })
// })
// })

网络请求中的基于axios和promise的封装

接口
// 导入必要的模块
const express = require(‘express’);
const app = express();

// 定义路由
app.get(‘/api/data1’, (req, res) => {
// 在这里处理GET请求逻辑,例如从数据库获取数据
// const data = [/* 从数据库或其他数据源获取数据 */];
let data={
code:‘200’,
student:{name:‘zhan san’,age:12,address:“gz”}
}

// 发送响应
res.json(data);
});

// 定义路由
app.get(‘/api/data2’, (req, res) => {
// 在这里处理GET请求逻辑,例如从数据库获取数据
// const data = [/* 从数据库或其他数据源获取数据 */];
let data={
code:‘200’,
student:{name:“li si”,age:21,address:“sz”}
}

// 发送响应
res.json(data);
});

// 启动服务器
app.listen(3000, () => {
console.log(‘Server started on port 3000’);
});

axios和promise封装一次,发送多个请求的方式

方式一,基于promise.all(),*这里的所有请求都成功才可以,否则执行catch里面的内容

// 封装一个发送请求的方法
function fetchData(url) {
return new Promise((resolve, reject) => {
axios.get(url)
.then(response => {
resolve(response.data);
})
.catch(error => {
reject(error);
});
});
}

function send(urls) {
Promise.all(urls.map(url =>
fetchData(url))
)
.then(data => {
// 处理成功获取到的数据 ,加入处理函数
console.log(data)
})
.catch(error => {
// 处理请求失败的情况
console.error(‘请求失败:’, error);
});
}

// 调用方法发送d请求获取多个数据
send([
“http://localhost:3000/api/data1”,
“http://localhost:3000/api/data2”
])

方式二,基于对象封装请求参数,try catch进行异常处理

const axios = require(‘axios’);
//基于对象分装请求参数
const requests = [
{ url: ‘http://localhost:3000/api/data1’, method: ‘get’ },
{ url: ‘http://localhost:3000/api/data3’, method: ‘get’ },

];

async function send(requests) {
for (let request of requests) {
try {
const response = await axios(request);
console.log(response.data);
} catch (error) {
console.error(Error occurred while making request to ${request.url}: ${error});
}
}
}

send(requests);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们需要发起多个异步请求,并在它们都完成后进行处理时,可以使用Promise来管理这些异步操作。下面是使用Promise发起多个异步请求的一种常见方式: 1. 创建一个Promise数组,用于存储每个异步请求Promise对象。 2. 使用循环或其他方式,遍历需要发起的异步请求,并为每个请求创建一个Promise对象。 3. 在每个Promise对象中,执行相应的异步操作,并在操作完成后调用resolve方法将结果传递给Promise对象。 4. 将每个Promise对象添加到Promise数组中。 5. 使用Promise.all方法,将Promise数组作为参数传入。这将返回一个新的Promise对象,该对象将在所有异步请求都完成后进行处理。 6. 使用.then方法,对返回的Promise对象进行处理。在.then方法中,可以获取到所有异步请求的结果,并进行相应的处理操作。 下面是一个示例代码: ```javascript // 异步请求函数 function asyncRequest(url) { return new Promise((resolve, reject) => { // 执行异步操作 // 假设这里使用了axios库发送请求 axios.get(url) .then(response => { // 异步操作成功,调用resolve方法传递结果 resolve(response.data); }) .catch(error => { // 异步操作失败,调用reject方法传递错误信息 reject(error); }); }); } // 发起多个异步请求 const promiseArray = [ asyncRequest('url1'), asyncRequest('url2'), asyncRequest('url3') ]; // 处理多个异步请求的结果 Promise.all(promiseArray) .then(results => { // 所有异步请求都完成后的处理操作 console.log(results); }) .catch(error => { // 处理错误情况 console.error(error); }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值