2.1 Promise 中的 then..catch 我们可以使用then()和catch()链接多个 Promises,以处理链中单个 Promise 的错误,如下所示: Promise.resolve...,其中我们使用fetch调用API,该 API 返回一个promise对象,我们使用catch块优雅地处理 API 失败。...➤ x = x + 1; ⓧ Uncaught ReferenceError: x is not defined 3.5 SyntaxError 当你在 JS 代码中使用任何错误的语法时,都会引发SyntaxError...} ⓧ Uncaught SyntaxError: Function statements require a function name ➤ 1 = 1 ⓧ Uncaught SyntaxError...: Invalid left-hand side in assignment ➤ JSON.parse("{ x }"); ⓧ Uncaught SyntaxError: Unexpected token
TypeError 类型在 JavaScript 中会经常遇到,在变量中保存着意外类型时,或者在访问不存在的方法时,都会导致这种错误。...再看几个例子: JSON.parse('{name:xiaoming}'); // Uncaught SyntaxError: Unexpected token n in JSON at position...1 JSON.parse('{"name":xiaoming}'); // Uncaught SyntaxError: Unexpected token x in JSON at position...); // remoteData 为服务端返回的数据 } catch { console.error("服务端数据格式返回异常,无法解析", remoteData); } 并不是捕获到错误就结束了...为例,模拟接口响应 401 的情况: // 请求 axios.get(/api/test/401") // 结果 Uncaught (in promise) Error: Request failed
():Uncaught ReferenceError - 函数参数重名:Uncaught SyntaxError ` 不建议使用 arguments 变量 : Uncaught SyntaxError...JSON json 对象解析不是伴随着JavaScript的出现而产生的。...c ='c'; const d; //uncaught syntaxError } console.log(c); //uncaught ReferenceError : c is nor derined...; 闭包函数; 全局变量; 对象属性循环引用; DOM节点删除时未解绑事件; promise增强类型 Promise 代表一个一部操作的执行返回状态,这个执行返回状态在Promise对象创建时是未知的...返回的Promise里面具有resolve()和reject()方法,只有当它的resolve或reject()被调用时,Promise方法才会继续执行,进入下一个then方法中操作。
写在前面 相比express的保守,koa则相对激进,目前Node Stable已经是v7.10.0了,async&await是在v7.6加入豪华午餐的,这么好的东西必须用起来 从目前历史来看,以顺序形式编写异步代码是自然选择的结果...,捕获异步错误 if (errorOccurs) { return next(error); } next(); }; 把所有中间件按顺序串起来,走到业务逻辑环节时,需要的所有输入项都预先准备好并挂在请求对象上了...,灵活很多 之前之所以用尾触发,就是因为异步中间件会立即返回,只能通过回调函数控制,所以约定尾触发顺序执行各中间件 而async&await能够等待异步操作结束(这里的等待是真正意义上的等待,机制类似于...全局错误捕获 上面捕获了reject的错误和同步执行过程中产生的错误,但异步throw的错误(包括异步运行时错误)还是捕获不到 而轻轻一个Uncaught Error就能让Node服务整个挂掉,所以有必要添上全局错误处理作为最后一道保障...app .use(header) .use(json) 请求预处理和响应数据包装都由前后的中间件完成,路由只负责产生输出(原始响应数据),例如: // route /html const fetch
, 当我们直接在最外层使用 await 的时候就会报错: Uncaught SyntaxError: await is only valid in async functions and the top...level bodies of modules 没有顶级 await 之前,当我们导入一个外部promise.js文件的时候,因为需要等待这个外部 js 执行完成再执行别的操作 // promise.js...// 第三种:Uncaught Error: 我的错误信息 // 第三种输出:错误原因: err 正则表达式匹配索引 给正则表达式添加修饰符 d,会生成匹配对象,记录每个组捕获的开始和结束索引,由于...,但会从最后一个迭代到第一个。...的行为相同,但会从最后一个迭代到第一个。
作为这些规范的一部分,添加了一个特殊的标志 d。通过使用它,正则表达式 API 将返回一个二维数组作为名索引的键。它包含每个匹配项的开始和结束索引。...如果在正则表达式中捕获了任何命名组,它将在 indices.groups 对象中返回它们的开始/结束索引, 命名的组名将是它的键。...#iteration); } } const x = new Foo(); // ❌ Uncaught SyntaxError: Private field '#iteration' must...#auditIncrement(); } } const x = new Foo(); // ❌ Uncaught SyntaxError: Private field '#auditIncrement...,我们将得到无法从类未声明它的对象中读取私有成员#privateField。
API的响应是JSON格式的,所以我们在请求完成后提取该响应(使用json()方法),然后把这个笑话打印到控制台。 请注意,JokeAPI是第三方API,我们不能保证返回笑话的质量。...type=single') .then(res => res.json()) .then(json => console.log(json.joke)); } 异步函数总是返回一个promise...Node还在其内置的util模块中添加了一个promise函数,可以将使用回调函数的代码转换为返回promise。而从v10开始,Node的fs模块中的函数可以直接返回promise。...从promise到async/await的转换 那么,为什么这一切对我们来说都很重要呢? 好消息是,任何返回promise的函数都可以使用async/await。...Uncaught SyntaxError: await is only valid in async functions, async generators and modules 当我们试图在一个async
我们还有一个 app.ts,它是服务器的入口。控制器、类型和路由也在它们各自以它们命名的的文件夹中。 现在,我们需要配置 tsconfig.json,使编译器运行我们的首选项。...在前面创建的 Todo 模块的帮助下,我们现在可以从 MongoDB 获取数据并返回 Todo 数组。...它将返回 AxiosResponse 为类型的 promise, 保存获取到的 ApiDataType 类型的 Todos。...todo ) return saveTodo } catch (error) { throw new Error(error) } } 这个函数接受用户输入的数据作为参数并返回...getTodos() 方法会返回 promise —— 因此,我们可以调用 then 函数并用获取到的数据更新 state,或者在发生任何错误时抛出一个错误。
例如: 程序试图打开一个不存在的文件、 网络连接断开 用户输入了无效字符 在类似这些情况下,我们可以自己写个自定义的错误来管理,或者直接让引擎为我们去定义这些错误。...,意味着返回一个新的错误对象。...SyntaxError 错误一般是关键字打错了,如下所示: va x = '33'; // SyntaxError: Unexpected identifier 或者,当在错误的地方使关键字时,例如await...除了next()之外,从生成器返回的迭代器对象还具有throw()方法。...但这种做法意义不大,后面我们会使用 Promise 来解决这类的问题。
:异步的网络请求-上传文件选取的是axios作为工具,很符合promise风格,写起来也丝滑友好;采用了输入框的失去焦点事件,失去焦点即上传文件。...我们再来看看后端的代码。后端文件名为:app.js。...const path = require('path');const app = express();app.use(express.json());app.use('/', express.static...shigen从分析每一个接口开始:/:主要是代理到public文件夹下,展示index.html,即我们上边的代码;upload_file_thunk:主要就是上传分片,并把分片从系统的某个空间转移到我们约定的目录之下...那我启动起来就是一个命令即可:node app.js浏览器访问输出的IP+端口即可。后记最近突然有了一种偏见,这些设计完全都是没用的。
1 什么是编程中的错误? 在我们的程序中,事物并非总是一帆风顺的。 特别是在某些情况下,我们可能希望 停止程序或在发生意外错误时通知用户。...SyntaxError TypeError URIError 请记住,所有这些错误类型都是 实际的构造函数,旨在返回一个新的错误对象。...除了 next() 之外,从生成器返回的迭代器对象还具有 throw() 方法。...使用这种静态方法没有什么要处理的,因为 即使一个或多个输入 Promise 拒绝,结果始终是一个已解析的 Promise。...从异步生成器函数返回的迭代器对象也有一个 throw() 方法,非常像它的同步形式。
配置中间件,注意要放在实例化express之后。 下面用代码来说明具体的实现步骤: 首先是Express中的主文件app.js。.../schema/default.js'); var app = express(); // 4....配置中间件,要放在实例化express之后 // 配置了以后,访问这个路由就可以得到一个可视化的界面了 app.use('/graphql', graphqlHTTP({ // 自定义的schema...3000, '127.0.0.1'); 然后是app.js里引入的自定义的schema,文件名为default.js。.../model/db.js'); // 从graphql中获取所需要的子模块 const { // schema类型 GraphQLObjectType, // 字段的类型
Express(一) ——简单入门 背景:参加的青训营项目,使用 Express 来实现后端,个人被分配到后端去。于是,简单速通了下 Express。项目结束,回头写下笔记,沉淀一下。...res.end()来结束响应 // res.end('hello world'); // 结束相应的同时发送数据 res.end(); // 结束响应 }); app.listen(8080...因为 express.json()只能解析 json 形式的 app.use(express.urlencoded()); // 配置解析表单请求体:application/x-www-form-urlencoded...// 返回一个对象。...(不过,也可以在结束的同时发送响应) res.send() 发送各种类型的响应。 4.1 res.end() 结束响应流程。用于在没有任何数据的情况下快速结束响应。
SyntaxError: Identifier 'b' has already been declared var会提升变量 let不存在变量提升 ...: includes():返回布尔值,表示是否找到了参数字符串。...startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。 endsWith(): 返回布尔值,表示参数字符串是否在原字符串的尾部。...person.play("basketball") person.play2("game"); person.play3("soccer") map方法 接收一个函数,将原数组中的所有元素用这个函数处理后放入新数组返回..."name": "chinese" } course_score_10.json { "id": 100, "score": 90 } 用过去的方法来实现这个需求 <!
前言 使用Koa已有一段时间,为什么会从Express转向Koa呢,那还是得从Express上说起。...「Promise」和「Async/Await」是未来主流的异步编程方式,Node应用中需要优雅的异步处理方式,而Koa恰好来得很是时候。下面以小白的角度对Koa源码进行一次解读。...app.use()的作用是将中间件添加到中间件数组middleware,将中间件数组middleware传入Compose()函数,Compose()函数返回一个匿名函数,匿名函数返回Promise对象...返回Promise,是为了方便await调用。 说到context,可与「Express」做一下小比较。对Express来说,并没有提供上下流信息,需要手动处理。...读完源码之后发现,不能只停留在使用上面,更应该花点时间来理解背后的源码,在解读源码的时候,也许会让自己有意外的收获哦。
// 逆序环视,从右向左扫描输入串,所以$2贪婪匹配到了053 '1053'.replace(/(?...<=(\d+))(\d+)$/, '[$1,$2]') === '1[1,053]' // 一般情况,从左向右扫描输入串,贪婪匹配$1为105 '1053'.replace(/^(\d+)(\d+)/,...Pending的Promise要么Resolved要么Rejected,而有些时候需要的是Resolved || Rejected,比如只想等到异步操作结束,不论成功失败,此时Promise.prototype.finally...对于不合法的转义序列,会报错: // Uncaught SyntaxError: Invalid Unicode escape sequence `\uZZZ` // Uncaught SyntaxError...: Invalid hexadecimal escape sequence `\xxyz` // Uncaught SyntaxError: Octal escape sequences are not
正如它的定义所言,当我们在 Remix 中开启流式渲染(默认行为)后,我们可以在 loader 中使用 defer 方法包裹返回值,它的行为完全和 json() 类型,唯一不同的是这个方法可以将 promise...4.2 同时,Remix 中提供了一个 组件用来负责解析从 loaderFunction 中返回的 promise。.../server/render').default; const app = express(); app.use(express.static('build')); app.use(express.static...同时,每一个从服务端返回携带 hidden 属性的 HTML 片段同时也会携带一个独一无二的 id 属性。..._reactRetry(); } }; 3s 后,整个页面数据请求结束,服务端会返回这段脚本给客户端。
在 ES6 中引入了关键字 let,使我们能够使用块作用域中的变量,从而帮助我们防止意外行为。 在这里,我们会得到与 Situation 2 中相同的错误。...1Uncaught SyntaxError: Identifier 'person' has already been declared Situation 6: 我们分别有一个函数作用域的变量,和块作用域的变量...为什么:每次我们创建一个新的 Student 实例时,都会将 sayHello 属性设置为是一个函数,并返回字符串 Hello。这是在父类(Person)类的构造函数中发生的。...可以说 async/await 是用来获得 promise 结果的语法糖。也有人认为它是比 promise.then 更具可读性的方式。 7....,上面的代码将返回 undefined。
XHR 的 ajax 封装 (简单版axios) 2.1 特点 函数的返回值为promise, 成功的结果为response, 失败的结果为error 能处理多种类型的请求: GET/POST/PUT/...({ url, method='GET', params={}, data={} }){ // 返回一个promise对象 return new Promise((resolve...实现功能 用express先搭建一个有延迟的服务器 const express = require('express') const cors = require('cors') const app...= express() // 使用cors, 允许跨域 app.use(cors()) // 能解析urlencode格式的post请求体参数 app.use(express.urlencoded()...) // 能解析json格式的请求体参数 app.use(express.json()) app.get('/products1', (req, res) => { setTimeout((
express和koa同为一批人进行开发,与express相比,koa显得非常的迷你。 因为express是一个大而全的http框架,内置了类似router之类的中间件进行处理。...一个从koa1.x切换到koa2.x的暗坑,co会对数组进行特殊处理,使用Promise.all进行包装,但是koa2.x没有这样的操作。...socket) return true return socket.writable } 这里就有一个koa与express对比的劣势了,因为koa采用的是一个洋葱模型,对于返回值,如果是使用ctx.body...= 'XXX'来进行赋值,这会导致最终调用response.end时在洋葱全部执行完成后再进行的,也就是上边所描述的回调中,而express就是在中间件中就可以自由控制何时返回数据: // express.js...总结一下koa与koa-compose的作用: koa 注册中间件、注册http服务、生成请求上下文调用中间件、处理中间件对上下文对象的操作、返回数据结束请求 koa-compose 将数组中的中间件集合转换为串行调用
领取专属 10元无门槛券
手把手带您无忧上云