node_sync函数_axios原理封装
// async 函数 // // 1.内置执行器。 // Generator 函数的执行必须靠执行器,所以才有了co模块,而async函数自带执行器。 // 也就是说,async函数的执行,与普通函数一模一样,只要一行 // // 2.更好的语义。 // async和await,比起星号和yield,语义更清楚了。 // async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。 // // 3.更广的适用性 // async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值, // 但这时会自动转成立即 resolved 的 Promise 对象)。 // // 4.async函数的返回值是 Promise 对象,你可以用then方法指定下一步的操作。 // async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。 // async函数返回一个 Promise 对象。 // async函数内部return语句返回的值,会成为then方法回调函数的参数。 // async function f() { // return 'hello world'; // } // f().then(v => console.log(v)) // ===> "hello world" // // 上面代码中,函数f内部return命令返回的值,会被then方法回调函数接收到。 // // async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。 // // 抛出的错误对象会被catch方法回调函数接收到。 // async function f1() { // throw new Error('出错了'); // } // f().then( // v => console.log(v), // e => console.log(e) // )// ==> Error: 出错了 // await命令 // 正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。 // 如果不是 Promise 对象,就直接返回对应的值。 // async function fn() { // // 等同于 // // return 123; // return await 123; // } // fn().then(v => console.log(v)) // ==>123 // // 任何一个await语句后面的 Promise 对象变为reject状态,那么整个async函数都会中断执行。 // async function fn1() { // await Promise.reject('出错了'); // await Promise.resolve('hello world'); // 不会执行 // } // // 有时,我们希望即使前一个异步操作失败,也不要中断后面的异步操作。 // // 这时可以将第一个await放在try...catch结构里面,这样不管这个异步操作是否成功,第二个await都会执行。 // async function fn2() { // try { // await Promise.reject('出错了'); // } catch(e) { } // return await Promise.resolve('hello world'); // } // fn2().then(v => console.log(v))// ==> hello world // // 另一种方法是await后面的 Promise 对象再跟一个catch方法,处理前面可能出现的错误。 // async function f() { // await Promise.reject('出错了') // .catch(e => console.log(e)); // return await Promise.resolve('hello world'); // } // f().then(v => console.log(v)) // 出错了 // hello world function myaxios (url) { return new Promise((resolve, reject)=> { try{ let xhr = new XMLHttpRequest() xhr.open('get', url) let handle = () => { if (xhr.readyState !== 4) return if (xhr.status>=200 && xhr.status<300 || xhr.status == 304) { resolve(xhr.responseText) } } xhr.onreadystatechange = handle xhr.send() }catch(e) { reject(e) } }) }
//返回promise对象, let request = myaxios('http://localhost:8888/index.html?getdata=newsdata') request .then(data => console.log('request',JSON.parse(data))) .catch(err=> console.log(err)) //用async函数调用 ;(async ()=>{ // await命令后面是一个 Promise 对象,返回该对象的结果 // 如果不是 Promise 对象,就直接返回对应的值。 let result = await myaxios('http://localhost:8888/index.html?getdata=newsdata') console.log(JSON.parse(result)) })()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!